Node.js child_process exec, stdin 没有传递给 ssh

Node.js child_process exec, stdin not being passed through to ssh

我有以下 Node.js 代码可以通过 ssh 连接到服务器,它转发 stdout 时效果很好,但无论何时我键入任何内容,它都不会转发到服务器。如何将我的本地标准输入转发到 ssh 连接标准输入?

var command = 'ssh -tt -i ' + keyPath + ' -o StrictHostKeyChecking=no ubuntu@' + hostIp;

var ssh = child_proc.exec(command, {
    env: process.env
});

ssh.stdout.on('data', function (data) {
    console.log(data.toString());
});

ssh.stderr.on('data', function (data) {
    console.error(data.toString());
});

ssh.on('exit', function (code) {
    process.exit(code);
});

如果您想将 process.stdin 传递给子进程,有两种方法可以解决此问题:

  • 子进程有一个 stdin 属性 表示子进程的标准输入。所以你需要做的就是添加 process.stdin.pipe(ssh.stdin)

  • 您可以在生成进程时指定自定义 stdio 以告诉它子进程的标准输入使用什么:

    child_proc.exec(command, { env: process.env, stdio: [process.stdin, 'pipe', 'pipe'] })
    

另外,在一个半相关的说明中,如果你想避免产生子进程并且对 and/or 有更多的编程控制有更轻量级的 ssh/sftp 连接,有 ssh2模块。