javascript - Spawn process on remote host in NodeJS -
i have simple node server serves page button. on click button needs execute command on remote host. when command finishes, output should given response of function , shown in html.
currently server code:
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','pi@raspi2','"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'); });   as can see following call tries execute 'ls' command on remote host:
var mpiproc = spawn('ssh','pi@raspi2','"ls"', { stdio: ['pipe','pipe',2,'pipe'] });   but doesn't return anything, while executed server directly terminal, returns list of directory content. test if command works way spawn tried doing this:
var mpiproc = spawn('ls', { stdio: ['pipe','pipe',2,'pipe'] });   which returns expected, list of directory content on server. how can create pipe remote host execute command , store result of command on server?
the second argument passed spawn() array of arguments. also, don't need manually quote arguments. should work:
spawn('ssh', ['pi@raspi2', 'ls'], { stdio: ['pipe', 'pipe', 2, 'pipe'] });   lastly, if want more programmatic (and lightweight) control on ssh connection, there ssh2 module (or of modules build on top of it), not use child processes.
Comments
Post a Comment