我一直在尝试找到一种使节点脚本自动为我打开ssh连接的方法。我不希望它运行任何命令,只需打开连接并让我开始输入即可。
我在连接方法上发现了这个问题:SSH client for Node.js
到目前为止,我发现的每一种方式都主要集中在打开ssh连接和运行带有node的命令上,但是我不想运行任何命令,只能输入我自己输入的命令。
我要使用的软件包是ssh2 https://github.com/mscdex/ssh2#installation
它可以很好地连接,但是我找不到用于将process.stdio轻松连接到它的方法的示例。我可以想象这样做的方法很复杂,但是似乎必须有一些非常简单的方法。
我已经阅读了有关“交互式shell会话”的部分,但似乎有点用词不当,因为它实际上只是运行ls -l
然后退出。根本没有任何互动。
https://github.com/mscdex/ssh2#start-an-interactive-shell-session
使用此工具启动正常,基本,普通的tty ssh会话的正确方法是什么?
答案 0 :(得分:0)
我最终解决了这个问题。奇怪的是,出现了任何问题(在检查ssh2的源代码时)似乎设置为完全按照我的想法执行。无论如何,这段代码对我有用:
const {host, password, port, username} = sshCreds;
return new Promise((resolve) => {
var conn = new Client();
conn.on('ready', function() {
console.log('Client :: ready');
conn.shell(function(err, stream) {
if (err) throw err;
const stdinListener = (data) => {
skipNext = true;
stream.stdin.write(data);
};
stream.on('close', function() {
process.stdin.removeListener("data", stdinListener)
conn.end();
resolve();
}).stderr.on('data', function(data) {
resolve();
});
// skip next stops double printing of input
let skipNext = false;
stream.stdout.on("data", (data) => {
if (skipNext) { return skipNext = false; }
process.stdout.write(data);
})
process.stdin.on("data", stdinListener)
});
}).connect({
host,
port,
username,
password,
});
})