如何在遠端機器上執行多個 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 語法
如果 command1 在名為 foo 的遠端主機上成功,只需執行 command2:$ ssh bar@foo "command1 && command2"
例如,在名為 'centos7' 的盒子上以 'vivek' 使用者身份執行 uptime 和 date 命令::ssh vivek@centos7 "uptime && date"
示例輸出:
18:36:17 1天 , 8 : 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'"
讓我們分解命令:
- ssh:使用 ssh 命令在遠端機器上執行命令。
- -t: 強制偽終端分配。這可用於在遠端機器上執行任意基於螢幕的程式,這非常有用並且可以避免錯誤。
- ls.www-2:託管在 Linode 或 AWS 雲上的遠端伺服器。
- sudo: 在名為 . 的遠端機器上執行 sudo 命令ls.www-2。
- --: 雙破折號“ --”表示“命令列標誌結束”。它告訴 ssh 或任何其他有效的 shell 命令不要嘗試解析命令列選項之後的內容。請參閱“ -‐(雙破折號)在 SSH Shell 命令中的含義是什麼?”瞭解更多資訊。
- 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"