我目前正在将内部CLI工具重建为命令行节点应用程序。其中一部分涉及将bash脚本重建为SSH到此应用程序的特定服务器部分。
我知道如何使用child_process
的spawn
函数实际执行SSH,但这不会产生与仅在 shell 中直接进行SSH相同的结果(即使在-tt
命令上使用标志ssh
时)。例如,键入的命令在屏幕上显示两次,并且尝试在这些远程计算机上使用nano
根本不起作用(屏幕大小不正确,仅占据控制台窗口的一半,并且使用箭头不起作用)。
有没有更好的方法可以在节点应用程序中执行此操作?这是我当前用于启动SSH session 的常规代码:
run: function(cmd, args, output) {
var spawn = require('child_process').spawn,
ls = spawn(cmd, args);
ls.stdout.on('data', function(data) {
console.log(data.toString());
});
ls.stderr.on('data', function(data) {
output.err(data.toString());
});
ls.on('exit', function(code) {
process.exit(code);
});
process.stdin.resume();
process.stdin.on('data', function(chunk) {
ls.stdin.write(chunk);
});
process.on('SIGINT', function() {
process.exit(0);
});
}
最佳答案
您可以使用ssh2-client包
const ssh = require('ssh2-client');
const HOST = 'junk@localhost';
// Exec commands on remote host over ssh
ssh
.exec(HOST, 'touch junk')
.then(() => ssh.exec(HOST, 'ls -l junk'))
.then((output) => {
const { out, error } = output;
console.log(out);
console.error(error);
})
.catch(err => console.error(err));
// Setup a live shell on remote host
ssh
.shell(HOST)
.then(() => console.log('Done'))
.catch(err => console.error(err));
免责声明:我是这个模块的作者