此工程從我的本地終端:如何從node.js生成ssh命令時傳遞密鑰文件?
ssh -i ~/.ec2/mykey.pem [email protected] 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',
'[email protected]',
'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訪問節點的庫,但它們使用的密碼不會削減它,無論如何,我的要求並不真正證明圖書館。
請告訴我我很愚蠢,這是可能的。
UPDATE:
好了,我可以使用 exec命令是這樣的:
var childProcess = require('child_process').exec;
slaves[slaveId] = childProcess('ssh -i mykey.pem [email protected] ls', function (error, stdout, stderr) {...}
不過,我覺得我已經從創建使用fork
真正從降級所有這些都是很好的消息和方便的屬性(我原來的實現在本地運行良好),有一臺真空吸塵器,並被告知自己做所有的工作(現在我想在遠程主機上啓動從屬服務器)。
如果你用'-i/mykey.pem''產生了兩個元素:''-i','/ mykey.pem''會怎麼樣? –
如果我將它分成兩個元素,那麼它就可以工作。這是使產卵工作的解決方案。 –