node.js - 如何使用 Node ssh2 启动用户交互式 ssh session ?

标签 node.js ssh

我一直在努力寻找一种方法让 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/

相关文章:

node.js - for 循环与 foreach

node.js - 使用电子邮件和密码获取 Linkedin API 的访问 token

node.js - -bash : nvm: command not found

node.js - 如何通过 OctoPrint Rest API 传递命令?

linux - 如何关闭 Expect 脚本中的 stderr 或退出后停止 "Connection to ... closed"消息?

node.js - Sails+Waterline 中的嵌套数据查询

linux - 如何通过 ssh 或 telnet 将终端大小更改发送到命令行应用程序?

ssh - 无法通过 SSH 连接到 openshift

amazon-web-services - 当您有权访问 EC2 实例时更改 EC2 pem 文件 key 对

ssh - 无法使用Ansible在远程服务器上添加SSH key