介紹如何在 Linux 中透過 SSH 連線到遠端主機後,執行本地端的指令稿。
SSH 連線執行本地端指令稿
若要透過 SSH 連線至遠端主機,並執行本地端的指令稿,可以使用以下指令:
# 連線至 192.168.0.1 遠端主機,並執行本地端的 local_script.sh 指令稿 ssh user@192.168.0.1 bash < local_script.sh
這是另外一種寫法,功能完全相同:
# 連線至 192.168.0.1 遠端主機,並執行本地端的 local_script.sh 指令稿 cat local_script.sh | ssh user@192.168.0.1 bash
以 sudo
權限執行指令稿
如果在 local_script.sh
指令稿中,有使用到 sudo
以管理者權限來執行指令,則可改用以下方式帶入 sudo
所需要的密碼:
# 執行需要 sudo 權限的指令稿 ssh user@192.168.0.1 'echo "PASSWORD" | sudo -Sv && bash' < local_script.sh
傳遞指令稿參數
假設 local_scrpt_arg.sh
的內容如下:
# local_script_arg.sh 指令稿內容 # 取得傳入參數 echo "Hello, ${YOUR_NAME}!"
若要在遠端執行這個指令稿時,傳入 YOUR_NAME
這個變數,可以在指令中直接指定:
# 指定傳入指令稿的 YOUR_NAME 參數 ssh user@192.168.0.1 YOUR_NAME=Mary bash < local_script_arg.sh
Hello, Mary!
以 Heredoc 執行指令稿
我們也可以利用 Heredoc 的方式,直接將指令稿寫在指令中,這樣就不必另外產生一個 local_script.sh
檔案:
# 以 Heredoc 執行指令稿 ssh user@192.168.0.1 bash << EOF echo "Hello" echo "World" EOF
Hello World
若要在執行 Heredoc 指令稿時,透過環境變數傳遞指令稿參數,可以採用這樣的方式:
# 以 Heredoc 執行指令稿,並傳遞參數 ssh user@192.168.0.1 YOUR_NAME=Mary bash << 'EOF' echo "Hello, ${YOUR_NAME}!" EOF
Hello, Mary!
關於 Heredoc 的用法,可以參考 Bash 程式設計教學與範例:Heredoc << 與 <<< 的用法。