簡體   English   中英

如何使用節點ssh2啟動用戶交互式ssh會話?

[英]How can I use node ssh2 to start a user interactive ssh session?

我一直在嘗試找到一種使節點腳本自動為我打開ssh連接的方法。 我不希望它運行任何命令,只需打開連接並讓我開始輸入即可。

我在連接方式上發現了這個問題: Node.js的SSH客戶端

到目前為止,我發現的每一種方式都主要集中在打開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會話的正確方法是什么?

我最終解決了這個問題。 奇怪的是,出現了任何問題(在檢查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,
    });
})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM