我一直在努力寻找一种方法让 Node 脚本自动为我打开 ssh 连接。我不希望它运行任何命令,只需打开连接并让我开始输入即可。
我在连接方式上发现了这个问题:SSH client for Node.js
到目前为止,我发现的每一种方法都主要集中在打开 ssh 连接和使用 node 运行命令,但我不希望运行任何命令,而是我自己键入的命令。
我尝试使用的包是 ssh2 https://github.com/mscdex/ssh2#installation
它连接良好,但我找不到将 process.stdio 轻松连接到它的方法示例。我可以想象实现它的复杂方法,但似乎必须有一些非常简单的方法。
我已经阅读了关于“交互式 shell session ”的部分,但它似乎有点用词不当,因为它实际上只是运行 ls -l
然后退出。那里根本没有互动。
https://github.com/mscdex/ssh2#start-an-interactive-shell-session
使用此工具启动正常、基本、简单的 ol'tty ssh session 的正确方法是什么?
最佳答案
我最终解决了这个问题。很奇怪的是,任何问题都出现了(当检查 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,
});
})
关于node.js - 如何使用 Node ssh2 启动用户交互式 ssh session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886024/