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
模块。
我有以下 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
模块。