これは私のローカル端末から動作します:
ssh -i ~/.ec2/mykey.pem ubuntu@ec2-yada-yada.amazonaws.com ls
もちろんそうです。しかし、node.js のchild_process.spawn
コマンドを使用して同じことを試みると、キーが存在しない/アクセスできないと不平を言います。
// child process
var childProcess = require('child_process').spawn;
// spawn the slave using slaveId as the key
slaves[slaveId] = childProcess('ssh', [
'-i /mykey.pem',
'ubuntu@ec2-yada.amazonaws.com',
'ls'
])
結果:
stderr: Warning: Identity file /mykey.pem not accessible: No such file or directory.
stderr: Permission denied (publickey).
試したこと:
キーへのパスのバリエーション:
/actual/path/to/mykey.pem
mykey.pem
(ノード プロジェクトのルートにある
/mykey.pem
ファイルのコピー) (ノード プロジェクトのルートにあるファイルのコピー)
~/.ec2.mykey.pem
(あるべき場所)ssh部分なしでコマンドを実行します。
childProcess(ls);
- 動作します。chmod 644, 600, 400 etc. mykey.pem
この時点での私の唯一の理論は、ファイル参照を渡すことに問題があり、 fs モジュールを使用して何かをする必要があるということです。(?) そして、はい、ノードで ssh アクセスするためのライブラリがあることは知っていますが、それらはそれをカットしないパスワードを使用しており、とにかく、私の要件はライブラリを正当化するものではありません。
私が愚かであり、これが可能であることを教えてください。
アップデート:
OK、次のようにexec コマンドを使用 できます。
var childProcess = require('child_process').exec;
slaves[slaveId] = childProcess('ssh -i mykey.pem ubuntu@ec2-yada.amazonaws.com ls', function (error, stdout, stderr) {...}
それでも、素敵なメッセージングと便利なプロパティ (ローカルで正常に動作する私の元の実装) をすべて使用して真のスレーブを作成することからfork
、掃除機を持ち、すべての作業を自分で行うように言われること (今ではリモートホストでスレーブを起動したい)。