【问题标题】:Why this SSH command on Nexpect does not work?为什么 Nexpect 上的这个 SSH 命令不起作用?
【发布时间】:2023-03-13 01:55:01
【问题描述】:

我正在尝试从 docker 容器中运行并获取有关 docker 容器的信息,为此我使用的是 Nexpect,但我发现了一个奇怪的错误:

exports.getIP = function(username, callback){
   var nexpect = require('nexpect');
   nexpect.spawn("ssh core@172.17.8.101 \"docker inspect --format '{{ .NetworkSettings.IPAddress }}' " + username + "\"")
         .expect(" ")
         .run(function (err, stdout, exitcode) {
             if (err) {
                 callback(err);
             }
           console.log("inside = " + stdout);
           ip = stdout;

           callback(null, ip);
    });
};

此方法的错误响应是“错误:找不到命令:ssh”

但是如果我在shell中手动运行:

ssh core@172.17.8.101 "docker inspect --format '{{ .NetworkSettings.IPAddress }}' test"

完美运行。

我也有非常相似的功能来使用 Nexpect 和 SSH 运行 Docker,并且运行良好。经过一些测试,我认为它与 \ 字符有关,但对于这个特定命令,我必须在字符串上使用引号。

【问题讨论】:

  • 你试过从它的目录运行它吗?以/usr/bin/ssh 为例。
  • 我刚刚尝试并得到:“错误:找不到命令:/usr/bin/ssh”,我在命令外壳上尝试过并且工作正常。

标签: node.js ssh expect docker


【解决方案1】:

您可以使用ssh2 module 而不是生成子进程并使用nexpect:

var Connection = require('ssh2');

var ssh = new Connection();
ssh.on('ready', function() {
  ssh.exec("docker inspect --format '{{ .NetworkSettings.IPAddress }}' test", function(err, stream) {
    if (err)
      throw err;

    stream.on('exit', function(code, signal) {
      console.log('>> Docker exited with code %d, signal %s', code, signal);
    }).on('close', function() {
      // this indicates that there is no more stdout/stderr output,
      // just like with node's spawn()
      ssh.end();
    }).pipe(process.stdout);

    stream.stderr.pipe(process.stderr);
  });
}).connect({
  host: '172.17.8.101',
  username: 'core',
  agent: process.env.SSH_AUTH_SOCK,
  // or if you have a specific key you want to use:
  //privateKey: require('fs').readFileSync(process.env.HOME + '/.ssh/id_rsa')
});

【讨论】:

  • 我收到此错误:错误:主机断开连接 (PROTOCOL_ERROR):数据包完整性错误。经过一番研究,我无法修复它,我正在使用 privateKey 方式。
  • 使用代理方式出现错误:错误:等待握手时超时
猜你喜欢
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-09
  • 2020-05-29
  • 1970-01-01
  • 2019-03-25
  • 1970-01-01
相关资源
最近更新 更多