[英]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.