【问题标题】:How can I use node ssh2 to start a user interactive ssh session?如何使用 node ssh2 启动用户交互式 ssh 会话?
【发布时间】:2018-08-16 22:16:23
【问题描述】:

我一直在尝试找到一种方法让节点脚本自动为我打开 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

使用此工具启动正常、基本、普通的 ol'tty ssh 会话的正确方法是什么?

【问题讨论】:

    标签: node.js ssh


    【解决方案1】:

    我最终解决了这个问题。很奇怪,出现的任何问题(在检查 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,
        });
    })
    

    【讨论】:

    • 我认为如果你以某种方式告诉 tty 关闭线路模式,你就不需要 skipNext
    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 2017-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多