ssh遠程執行命令


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM