在ssh2 nodejs中以编程方式输入密码

时间:2017-09-28 00:59:34

标签: node.js ssh

我使用的是ssh2 nodejs client(https://github.com/mscdex/ssh2

我试图执行以下操作:

  1. SSH进入框。
  2. 登录docker。
  3. 会重新提示输入密码。输入该密码。
  4. 我在第3步失败了。

    这是我的代码

    var Client = require('ssh2').Client;
    var conn = new Client();
    
    conn.on('ready', function() {
      console.log('Client :: ready');
      conn.exec('sudo docker ps', {pty: true}, function(err, stream) {
        if (err) throw err;
        stream.on('close', function(code, signal) {
          conn.end();
    
        // data comes here
        }).on('data', function(data) {
          console.log('STDOUT: ' + data);
    
        }).stderr.on('data', function(data) {
          console.log('STDERR: ' + data);
        });
         // stream.end(user.password+'\n'); 
         ^^ If i do this, it will work but I won't be able to do anything else afterwards
    
      });
    
    }).connect({
      host: 'demo.landingpage.com',
      username: 'demo',
      password: 'testuser!'
    });
    

    如何以编程方式输入密码? (我在执行{pty: true}

    时已经在使用conn.exec

    请指教!

1 个答案:

答案 0 :(得分:1)

假设您的stream是双工流,您可以通过编写

来写入流而不会结束
.on('data', (data) => {
   stream.write(user.password+'\n');
}

或者您可以使用cb函数

function write(data, cb) {
  if (!stream.write(data)) {
    stream.once('drain', cb);
  } else {
    process.nextTick(cb);
  }
}

.on('data', (data) => {
   write(user.password+ '\n', () => {
      console.log('done');
   }
});