如何在 bash 腳本中退出 SSH 連線

如何在 bash 腳本中退出 SSH 連線

我已經閱讀了這裡有關此主題的幾篇文章,但我找到的每個解決方案似乎都是運行一個命令的單行程式碼。

我正在創建一個腳本,一次又一次地透過 ssh 連接到多個不同的主機。目標是透過 ssh 連接到計算機,執行一些本地命令,執行腳本,等待其完成,然後退出 ssh 會話並繼續進行下一個。

但是,當我使用“exit”命令時,它不起作用,只是完全退出腳本。

答案1

我猜您的腳本沒有退出 shell 會話,因為您直接使用./exit.sh.你應該用source它來代替。

exit然後,腳本中的語句將關閉 shell 會話。

$ source exit.sh
# or
$ . exit.sh

內建函數source執行您的腳本目前 shell 上下文,同時./exit.sh啟動新外殼來運行它。

答案2

您是否嘗試過將命令放入文件中並使用 cat 或 EOF

ssh -t [email protected] << EOF
 command1
 command2
 exit
EOF

答案3

我建議您查看pssh您想要完成的任務 - 它允許您輕鬆處理跨機器打開/關閉連接的細微差別,甚至可以並行運行以減少執行時間。

它仍然用作ssh傳輸協議,因此它顯然與循環連接一樣安全ssh

https://linux.die.net/man/1/pssh

答案4

您通常可以毫無問題for地進行循環。ssh

$ for srv in 192.168.88.138; do echo $srv:; ssh $srv uptime; done
192.168.88.138:
 13:27:25 up 30 days,  8:42,  1 user,  load average: 4.15, 4.06, 4.06

所以在這種情況下我就跑到uptime另一邊了。您可以替換uptime為您想要運行的內容。無論你放在那裡什麼,出口就在哪裡。 uptime一旦列印輸出,就會退出,但如果您正在編寫腳本,您可能需要確保它最終退出,以便循環for可以繼續。

如果您正在做任何複雜的事情,我建議您在單獨的檔案中建立腳本,然後scp將其連接到您想要運行它的伺服器,然後透過 ssh 運行它。嘗試透過引用和轉義將複雜的東西帶入 ssh 比通常更具挑戰性。

我已經這樣做了數百次,當您希望一次在一台伺服器上運行時,它工作得很好。如果你想讓事情並行運行,還有其他選擇,但我會看看第一的。

相關內容