2016-06-11 8 views
0

私はボタン付きのページを提供する単純なノードサーバーを持っています。このボタンをクリックすると、リモートホスト上でコマンドを実行する必要があります。コマンドが終了すると、出力は関数の応答に渡され、htmlに表示されます。NodeJSのリモートホストでのプロセスの生成

現在、これはサーバコードです:

app.use(logger("combined")); 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

app.get('/index.html', function (req, res) { 
    res.sendFile(__dirname + "/" + "index.html"); 
}) 

app.post('/connect', function (req, res) { 
    var spawn = require('cross-spawn-async'); 
    var mpiProc = spawn('ssh','[email protected]','"ls"', { stdio: ['pipe','pipe',2,'pipe'] }); 

    var grid = "...8.1..........435............7.8........1...2..3....6......75..34........2..6.."; 
    str = ""; 
    mpiProc.stdout.on('data', function(data) { 
     console.log(data); 
     str = data.toString(); 
     res.write('data: ' + JSON.stringify({ msg : str }) + '\n\n'); 
     // Output  
    }); 

    mpiProc.on('close', function(code) { 
     res.end(str); 
     // Script exit code 
    }); 

    mpiProc.on('error', function(code) { 
     res.end('stderr: ' + code); 
     // Script exit code 
    }); 
}) 
    require('http').createServer(app).listen(3000, function(){ 
    console.log('Listening on 3000'); 
}); 

次の呼び出しは、リモートホスト上で「1!」コマンドを実行しようとすると見ることができるように:

var mpiProc = spawn('ssh','[email protected]','"ls"', { stdio: ['pipe','pipe',2,'pipe'] }); 

しかし、これはしていません何かを返すと、サーバから直接端末から実行されている間に、ディレクトリの内容のリストを返します。

var mpiProc = spawn('ls', { stdio: ['pipe','pipe',2,'pipe'] }); 

、私が期待したもの、サーバー上のディレクトリの内容のリストを返す:コマンドは私がこれをやってみました菌糸をこのように動作するかどうかをテストするには。 コマンドを実行し、コマンドの結果をサーバーに格納するために、リモートホストへのパイプを作成するにはどうすればよいですか?

答えて

0

spawn()に渡される第2引数は、引数の配列です。また、引数を手動で引用する必要もありません。これは動作するはずです:

spawn('ssh', ['[email protected]', 'ls'], { stdio: ['pipe', 'pipe', 2, 'pipe'] }); 

ない最後に、あなたがSSH接続を介してより多くのプログラム(および軽量)制御したい場合は、ssh2モジュール(またはそれの上に構築モジュールのいずれか)があります、子プロセスを使用します。

関連する問題