1.遠程執行普通命令
ssh username@ip "cmd1;cmd2" 多條命令間用分號分割
ssh -l username 192.168.1.1等同於 ssh username@192.168.1.1
2.遠程執行需要交互的命令
例如top命令,直接執行ssh username@ip "top"會報TERM environment variable not set.的錯誤
解決方式是使用參數 -t,使用參數 -t可以顯式的告訴 ssh,我們需要一個 TTY 遠程 shell 進行交互。添加 -t 參數后,ssh 會保持登錄狀態,直到你退出需要交互的命令。
cmd中的幾種特殊情況:
- 執行多行數據:用單引號或雙引號開頭,然后寫上幾行命令,最后再用相同的引號來結束
- 執行的命令中有單/雙引號:混合使用單雙引號
- 執行命令中有變量
- name=aa
- ssh username@ip -p${port} "echo $name" #輸出aa
- ssh username@ip -p${port} 'echo $name' #輸出空,不能使用這種方式
- ssh username@ip -p${port} bash -c "'echo $name'" #輸出aa
3.在遠程機器中執行本地腳本
在本地創建一個腳本test1.sh,假設內容為ls\npwd
執行ssh username@ip < test1.sh即可,通過重定向 stdin,本地的腳本 test.sh 在遠程服務器上被執行。
如果本地腳本中需要傳參,執行ssh username@ip -p${port} 'bash -s' < test1.sh hello world即可
test1.sh的內容為
- echo 'all paras are '$*
- echo 'first para is '$0
- echo 'second para is '$1
執行ssh username@ip -p${port} 'bash -s' < test1.sh hello world后的輸出為:
- all paras are hello world
- first para is bash
- second para is hello
設置本地機器免密登錄遠程機器的方法:ssh username@ip 'mkdir -p .ssh&&cat >>.ssh/authorized_keys' < ~/.ssh/id_rsa.pu
4.執行遠程機器中的腳本
遠程機器中有一個腳本/home/user/a.sh,需要在本地操作遠程機器執行腳本a.sh,需要執行ssh username@ip -p${port} "/home/roaddb/a.sh"
注意指定腳本為全路徑
如果要傳參,則直接在腳本后加上參數即可,即ssh username@ip -p${port} "/home/roaddb/a.sh hello world"
aa.sh的內容為
- echo 'all paras are '$*
- echo 'first para is '$0
- echo 'second para is '$1
輸出為:
- all paras are hello world
- first para is /home/roaddb/a.sh
- second para is hello
