我正在使用node.js,我試圖在Web瀏覽器中嵌入控制檯以在遠程服務器中工作。 Web應用程序執行連接,因此用戶不需要執行ssh [email protected]
,而只需鍵入命令。ssh與node.js的持久會話
我試過了node.js的'ssh2
模塊和其他使用ssh2的模塊。但我總是遇到同樣的問題。每次我使用exec()
以編程方式執行命令時,ssh會話都會重新啓動。我會用一個例子來更好地解釋它。
> ls
返回主目錄的內容,在主目錄中的一個目錄mydir
> cd mydir
> ls
回到我的家目錄的內容再一次,因爲在執行命令後,SSH會話關閉/重新啓動。
任何可以完成這項工作的node.js庫?或者甚至是一個與JavaScript不同的其他技術庫?
編輯:用於澄清,使用的node.js'模塊ssh-exec
服務器具有執行使用ssh在其他機器的一些命令的其他例子。在服務器函數包含下面的代碼
var c = exec.connection('[email protected]'); // It takes the ssh key from the default location
exec('cd mydir', c).pipe(process.stdout);
exec('ls -lh', c).pipe(process.stdout);
正如你可以看到我不是結束前exec
但我得到的輸出是主目錄mydir目錄中沒有的內容的內容之後的連接,因爲在每個exec
之後ssh會話都會重置。
不是這樣的。我使用ajax來調用服務器中的一個函數,該函數使用先前創建的shh連接並執行'connection.exec('cd mydir')'。後來,其他ajax請求用其他命令調用該函數;該函數執行執行'connection.exec('ls')'的命令。我沒有輸出問題,並得到它並打印正常,但輸出不是預期的(它不是mydir的內容,而是主目錄的內容),因爲ssh會話似乎被重置在每個exec之後:( –
不會有太大的變化,你的exec-call仍然有一個新的上下文,你需要在服務器端打開ssh連接並保持打開狀態(如果你願意的話,還可以設置空閒超時) – CFrei
我是什麼試圖解釋的是,這是行不通的。如果我在服務器端以編程方式打開一個連接,之後立即執行'connection.exec('cd mydir')'並立即執行'connection.exec('ls ')'結果不是預期的,因爲連接似乎在每次執行後都被重置,我將編輯我的問題來澄清一個例子。 –