1. 程式人生 > 其它 >如何在遠端機器上執行多個 SSH 命令並安全退出

如何在遠端機器上執行多個 SSH 命令並安全退出

https://www.cyberciti.biz/faq/linux-unix-osx-bsd-ssh-run-command-on-remote-machine-server/

 

在本地伺服器上有一個備份同步程式。我設定了無 ssh 密碼登入,並且可以在 bash 指令碼中在外部伺服器上執行命令:
ssh root@server2 "sync; sync; /sbin/shutdown -h now"
如何在遠端 Unix 或 Linux 伺服器上的 bash 中執行多個命令?在 bash shell 中 SSH 和執行各種 unix 命令的最佳方法是什麼?

有多種方法可以在遠端 Unix 伺服器上執行多個命令。

此頁面顯示了使用 bash shell 進行 ssh 和執行多個命令的最簡單方法。

 

在遠端機器上執行多個命令的簡單 bash 語法

如果 command1 在名為 foo 的遠端主機上成功,只需執行 command2:
$ ssh bar@foo "command1 && command2"
例如,在名為 'centos7' 的盒子上以 'vivek' 使用者身份執行 uptime 和 date 命令::
ssh vivek@centos7 "uptime && date"
示例輸出:

 18:36:17 18 : 14,0使用者平均負載
1.02,1.06,1.05 Fri Jun 7
18:36:17 IST 2019 _ _ _ _ _ _ _ _

為避免sudo: Sorry, you must have a tty to run sudo錯誤傳遞-t給 ssh:
$ ssh -t bar@foo "command1 && command2"

以 sudo 身份通過 SSH 執行多個命令

以下是使用apt 命令apt-get 命令應用更新的方法:

ssh -t user@server sudo -- "sh -c 'apt update && apt upgrade -y'"
 
# 比如ec2 Debian或者Ubuntu Linux伺服器可以更新如下 ssh -t ls.www-2 sudo -- " sh -c 'apt update && apt upgrade -y'"

點選放大

讓我們分解命令:

  1. ssh:使用 ssh 命令在遠端機器上執行命令。
  2. -t: 強制偽終端分配。這可用於在遠端機器上執行任意基於螢幕的程式,這非常有用並且可以避免錯誤。
  3. ls.www-2:託管在 Linode 或 AWS 雲上的遠端伺服器。
  4. sudo: 在名為 . 的遠端機器上執行 sudo 命令ls.www-2
  5. --: 雙破折號“ --”表示“命令列標誌結束”。它告訴 ssh 或任何其他有效的 shell 命令不要嘗試解析命令列選項之後的內容。請參閱“ -‐(雙破折號)在 SSH Shell 命令中的含義是什麼?”瞭解更多資訊。
  6. sh -c 'apt update && apt upgrade -y': 從命令字串 (' apt update && apt upgrade -y') 運算元而不是從標準輸入中讀取命令。這是執行多個 shell 命令的最安全方法。瞭解如何在 Linux 或 Unix 下在 sudo 中執行多個命令。

如何執行多個 SSH 命令

執行日期和主機名命令:
$ ssh user@host "date && hostname"
可以在名為 server1.cyberciti.biz 的遠端機器上執行 sudo 命令,如下所示
$ ssh -t [email protected] "sudo /sbin/shutdown -h now"
最後:
$ ssh [email protected] "sync && sync && /sbin/shutdown -h now"