节点ssh2 shell无法在远程计算机

时间:2015-06-23 13:28:14

标签: node.js

我正在node.js中执行一个程序,将我的代码从git部署到服务器(Digital Ocean)。我通过ssh2模块连接到服务器并通过shell运行命令,如下面:

var Client = require('ssh2').Client;

var conn = new Client();
conn.on('ready', function() {
  console.log('Client :: ready');
  conn.shell(function(err, stream) {

    if (err) throw err;

    stream.on('close', function() {

      console.log('Stream :: close');
      conn.end();

    }).on('data', function(data) {

      console.log('STDOUT: ' + data);

    }).stderr.on('data', function(data) {

      console.log('STDERR: ' + data);

    });

    stream.end('sudo apt-get update -y\nsudo apt-get install -y build-essential\nexit\n');
 });
}).connect({
  host: 'x.x.x.x',
  port: 22,
  username: 'yyy',
  privateKey: 'zzz'
});

命令“apt-get update”工作正常,但命令“apt-get install build-essential”(我试图安装其他程序,如vim和curl)似乎冻结输出的最后一行的流。 我认为它可能是由apt-get的提示“Y / n”引起的,但是我找不到它的解决方法。有人知道如何处理它吗?

1 个答案:

答案 0 :(得分:2)

尝试使用\n更改&&

stream.end('sudo apt-get update -y && sudo apt-get install -y build-essential && exit');