簡體   English   中英

ssh 與 node.js 的持久會話

[英]ssh persistent sessions with node.js

我正在使用 node.js,我正在嘗試在 web 瀏覽器中嵌入控制台以在遠程服務器中工作。 web 應用程序執行連接,因此用戶無需執行ssh username@host ,只需鍵入命令。

我已經嘗試過 node.js 的ssh2模塊和其他使用 ssh2 的模塊。 但我總是遇到同樣的問題。 每次我使用exec()以編程方式執行命令時, ssh session 都會重新啟動。 我會用一個例子更好地解釋它。

> ls

返回主目錄的內容,主目錄中的目錄之一是mydir

> cd mydir
> ls

再次返回我的主目錄的內容,因為在執行命令后 ssh session 被關閉/重新啟動。

任何可以完成這項工作的 node.js 庫? 甚至是不同於 javascript 的其他技術庫?

編輯:用於澄清的其他示例,使用 node.js 的模塊ssh-exec服務器必須使用 ssh 在其他機器上執行一些命令。 服務器中的一個 function 包含以下代碼

var c = exec.connection('username@host.com'); // It takes the ssh key from the default location
exec('cd mydir', c).pipe(process.stdout);
exec('ls -lh', c).pipe(process.stdout);

如您所見,我沒有在第一次exec后結束連接,但我獲得的 output 是主目錄的內容而不是 mydir 目錄的內容,因為 ssh Z21D6F40CFB511982E45424E0E2ZA 在每個exec之后重置。

node.js ssh2模塊的維護者提供了解決方案。

要使用方法shell()而不是方法exec()

shell()方法與我們連接的服務器創建一個交互式會話。 shell()方法提供一個流作為其回調的參數(類似於exec()方法)。

就像使用exec()stream.on('data', function(data, extended) {...}); 可用於獲取命令的輸出。 但是,在這種情況下,要向連接的機器提供命令(輸入),則需要使用stream.write(yourcommand+'\\n');

PS。 隨時進行編輯以提高答案的准確性。

我不得不猜測一下,但是您會執行child = exec('ssh username@host ls')嗎?

你可以做類似的事情

child = exec('ssh username@host');

瀏覽器的前部和“循環”中

child.stdin.write('ls\n');

完成后,只需關閉stdin

child.stdin.end()

這也完成了子進程。

我知道此鏈接很舊,但我認為如果有人在尋找解決方案,這可能會有所幫助。

要使用方法shell()而不是方法exec()。

作品。 這是另一個解決方案。 使用絕對文件路徑,即

conn.exec("mkdir -p /home/user/Direc/{one,two,three}/", function(err, stream) {
        if (err) throw err;
        stream.on('data', function(data) {
            console.log('STDOUT: ' + data);
        }).stderr.on('data', function(data) {
            console.log('STDERR: ' + data);
        });
    });

conn.exec("ls -la /home/user/", function(err, stream) {
    if (err) throw err;
    stream.on('close', function(code, signal) {
        console.log('Stream :: close :: code: ' + code + ', signal: ' + signal);
        conn.end();
    }).on('data', function(data) {
        console.log('STDOUT: ' + data);
    }).stderr.on('data', function(data) {
        console.log('STDERR: ' + data);
    });
});

我需要訪問一個目錄,然后運行一個命令。 command1: cd /onu command2: show online slot 14 pon 14,有什么解決辦法嗎?

暫無
暫無

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

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