使用Nodejs mscdex / ssh2的root密码

时间:2018-01-18 13:21:48

标签: node.js express npm

我正在尝试使用mscdex/ssh2在远程linux机器上以root身份登录,我正在尝试实现的步骤是:

  1. 通过ssh连接到远程计算机
  2. 以root用户身份执行命令
  3. 但是我在第二部分失败了,我无法正确设置密码,这是我的代码。

      conn.on('ready', function() {
        conn.exec('sudo -s ls /', { pty: true }, (err, stream) => {
          if (err) {
           res.send(err);
          }
    
          stream.on('exit', (code, signal) => {
           console.log(`Stream :: close :: code: ${code}, signal: ${signal}`);
          });
    
          stream.on('data', data => {
    
            // here it's where supposedly the password should be given
            stream.write('r00tpa$$word' + '\n');
            console.log(data);
          });
    
        });
      }).connect({
        host: '192.168.100.100',
        username: 'fakeAdmin',
        password: 'fakePassword'
      });
    

    我已经将pty选项设置为true,但我只是在promt上收到错误消息。

    更新:

    这是我的新代码段:

    const Client = require('ssh2').Client;
    const conn = new Client();
    
    const encode = 'utf8';
    
    conn.on('ready', () => {
      conn.shell(false, { pty: true }, (err, stream) => {
        if (err) { console.log(err) }
    
        stream.on('data', (data) => {
          process.stdout.write(data.toString(encode));
        });
    
        stream.write('ls -a\n');
        stream.write('uptime\n');
        stream.write('su\n'); // here nothing seems to happen
        stream.write('rootPassword\n'); // here also
        stream.write('cd /tmp && ls\n');
      });
    })
    .connect({
      host: "192.168.100.100",
      username: "username",
      password: "usernamePassword"
    });
    

    我设法以更清洁的方式执行了几个命令部分,我甚至在库github页面.shell command "su" loses interaction上提出了一个问题,但是现在它发生了什么它有点奇怪,我可以运行尽可能多的命令就像我什么,但是当我运行“su”命令似乎没有发生任何事情时,有人会先介入这个吗?或者我做错了什么? 对不起,如果我无法解释自己。

    问候。

2 个答案:

答案 0 :(得分:0)

考虑使用node-ssh。我以前没有遇到任何问题,它也更现代,因为它有一个基于promise的异步接口。

如果需要执行root操作,还应该直接连接到root用户,除非您的用户在执行sudo时没有要求输入密码,例如使用Ubuntu AMI的EC2实例默认情况下,ubuntu用户没有密码(您通过ssh密钥对进行身份验证)。

尝试通过命令登录并以纯文本格式输入密码不是一个好主意。另外,请考虑向root用户添加ssh密钥,以使用私钥而不是密码进行身份验证。

const SSH = require('node-ssh')

const ssh = new SSH()  

ssh.connect({
  host: '<host>',
  username: 'root',
  password: '<password>'
}).then(() => ssh.exec('your command'))

答案 1 :(得分:0)

我找到了一种方法来执行我要搜索的内容,这是代码:

.Rmd