40617


AWS Lambdaから、curlを使ってFTP接続をしようとしています。  
しかし、pwが'\06'始まりなのが災いしてか、PWを正しく引き渡すことができず、  
Access denied: 530"になってしまいます。  
（コマンドプロンプトから実行すると接続でることを確認しました。）

一部ですが、コードは以下の通りです。

[code]

    var com = 'curl --globoff -u testuser:\06testpw ${url}'
    const child = exec(com, function(error) {
      context.done(error, 'Process complete!')});
    
[/code]

※実際には、${url}に接続先を指定しています。

・上記の場合、'testuser:06testpw'が引き渡されます。  
・’testuser:'+'\06'+'testpw'とすると、'testuser:testpw'が引き渡されます。  
・'\\\06testpw'を指定すると、'\\\06testpw'そのままになってしまいます。

Encodeなどいろいろ試しましたが、うまくいきませんでした。。

お力添えいただきたく、よろしくお願いいたします。


CC BY-SA 3.0
2017-12-29T11:20:01.377
40604
2017-12-30T02:25:21.497
2017-12-29T22:22:26.653
26828
26828
question
javascript node.js aws-lambda
AWS Lambda Node.js6.10 '/06'のエスケープがうまくいかない


[`child_process.exec`](https://nodejs.org/docs/v0.6.10/api/child_processes.html#child_process.exec)は

> Runs a command in a shell and buffers the output.

とのことですので、`exec`に渡した値が改めてシェルによって再度解析されます。`curl`に引数`--globoff`, `-u`,
`testuser:\06testpw`, `${url}`を渡したいのであれば`exec`には

[code]

    curl --globoff -u testuser:\\06testpw ${url}
    
[/code]

を渡す必要があり、JavaScriptコードでは

[code]

    var com = 'curl --globoff -u testuser:\\\\06testpw ${url}';
    
[/code]

と2重エスケープすればいいのではないでしょうか？

* * *

> '\06testpw'を指定すると、'\06testpw'そのままになってしまいます。

これは本当でしょうか？ 単に成功しないことと`\\06testpw`になることは別問題ですが、どのように確認されたのでしょうか？


CC BY-SA 3.0
2017-12-30T02:25:21.497
40617
2017-12-30T02:25:21.497
4236
40604
answer