5

これは私のローカル端末から動作します:

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).

試したこと:

  1. キーへのパスのバリエーション:
    /actual/path/to/mykey.pem
    mykey.pem(ノード プロジェクトのルートにある
    /mykey.pemファイルのコピー) (ノード プロジェクトのルートにあるファイルのコピー)
    ~/.ec2.mykey.pem(あるべき場所)

  2. ssh部分なしでコマンドを実行します。childProcess(ls);- 動作します。

  3. 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、掃除機を持ち、すべての作業を自分で行うように言われること (今ではリモートホストでスレーブを起動したい)。

4

1 に答える 1