我有以下Node.js代码ssh到服务器,它很好地转发stdout,但每当我输入任何东西它不转发到服务器.如何将本地stdin转发到ssh连接stdin?
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
,以告诉它为子进程的stdin使用的内容:
child_proc.exec(command, { env: process.env, stdio: [process.stdin, 'pipe', 'pipe'] })
此外,在半相关的说明中,如果您想避免产生子进程并且具有更多编程控制和/或具有更轻量级的ssh / sftp连接,则存在ssh2
模块.