2014-12-27 91 views
4

我試圖通過nodejs child_process運行一個簡單的ssh命令。當我通過nodejs代碼運行命令時,它失敗,說沒有找到我發送到服務器的命令。當我運行相同的命令只需複製&粘貼到我的終端窗口,它運行良好。ssh與nodejs child_process,服務器上找不到命令

這裏是我想要做的命令行版本:

ssh [email protected] 'ls -lai'

這裏是一樣的ssh命令的版本的NodeJS使用child_process

var cproc = require('child_process'); 
var exec = cproc.exec; 
var spawn = cproc.spawn; 

var command = "ssh"; 
var args = ["[email protected]", "'ls -lai'"]; 

var child = spawn(command, args); 

child.stdout.on('data', function(data) { 
    console.log('stdout: ' + data); 
}); 

child.stderr.on('data', function(data) { 
    console.log('stderr: ' + data); 
}); 

child.on('close', function(code) { 
    console.log('exit code: ' + code); 
    process.exit(); 
}); 

從輸出命令行版本正是我所期望的...我得到目錄列表。但是當我運行這個nodejs代碼來執行相同的命令時,stderr回調代碼開始運行,並且該命令返回代碼127(未找到命令)。

$ node test-ssh.js 
stderr: bash: ls -lai: command not found 

exit code: 127 

根據輸出這裏,「LS -lai」命令沒有找到,但沒有任何意義,因爲當我直接運行這個從我的終端提示符工作完全正常。

有人知道爲什麼通過nodejs運行ssh會導致這種情況發生?

回答

2

原來圍繞遠程命令的單引號是問題所在。

var args = ["[email protected]", "ls -lai"];

和它的作品

0

我有這個問題太多,但我認爲行情是對我來說是必要的,由於我試圖同時運行多個命令,我一直試圖找到一種方法周圍。

例如:

var args = ["[email protected]", "'cd ~ && ls -lai'"] 

將打破。但是,您仍然可以省略引號,並且所有內容都將通過SSH正確執行,因爲child_process會將其作爲單個參數傳遞給它:

var args = ["[email protected]", "cd ~ && ls -lai"] 
相關問題