『ssh』使用shell远程执行命令
經常需要遠程到其他節點上執行一些shell命令,如果分別ssh到每臺主機上再去執行很麻煩,因此能有個集中管理的方式就好了。所以介紹幾種shell命令遠程執行的方法。
前提條件:配置shell免密登錄
ssh user@remoteNode "df -h"
執行多條命令ssh user@remoteNode "cd /home ; ls" #雙引號,必須有。如果不加雙引號,第二個ls命令在本地執行;分號,兩個命令之間用分號隔開
執行需要交互的命令ssh user@remoteNode "sudo ls /root"
sudo: sorry, you must have a tty to run sudo
ssh user@remoteNode "top" TERM environment variable not set.這兩條命令雖然提示的失敗原因不同,但它們有一個共同點:都需要與用戶交互(需要 TTY)。所以它們失敗的原因也是相同的:
默認情況下,當你執行不帶命令的 ssh 連接時,會為你分配一個 TTY。因為此時你應該是想要運行一個 shell 會話。
但是當你通過 ssh 在遠程主機上執行命令時,并不會為這個遠程會話分配 TTY。此時 ssh 會立即退出遠程主機,所以需要交互的命令也隨之結束。
好在我們可以通過 -t 參數顯式的告訴 ssh,我們需要一個 TTY 遠程 shell 進行交互!
添加 -t 參數后,ssh 會保持登錄狀態,直到你退出需要交互的命令。
2.腳本方式:
2.1執行本地腳本ssh user@remoteNode < test.sh
2.2向腳本傳遞參數ssh user@remoteNode 'bash -s' < test.sh age
2.3執行遠程服務器上的腳本ssh user@remoteNode "/tmp/test.sh" #寫腳本的絕對路徑
2.4執行遠程服務器上的腳本并帶參數ssh user@remoteNode "/tmp/test.sh arguement"
示例2: 初始化系統環境。在test.sh腳本中編寫:關閉selinux命令、關閉iptables、修改hosts文件、安裝jdk環境等。 #!/bin/bash #變量定義 ip_array=("192.168.1.1" "192.168.1.2" "192.168.1.3") user="tester" remote_cmd="/home/test.sh" for ip in ${ip_array[@]} do ssh -t -p $port $user@$ip "remote_cmd" done命令使用方法
ssh [-p port] [user@]hostname [command]
port : ssh連接端口號
user: ssh連接用戶名
ip:ssh連接的ip地址
cmd:遠程服務器需要執行的操作
其他選項:
-t:強制分配一個偽終端,可以在遠程機器上執行任何全屏幕(screen-based)程序,所以非常有用,例如菜單服務。雙t選項(-tt)的意思是強制分配終端,即使ssh沒有本地終端。
-T:禁止分配偽終端。
-q:靜默模式,忽略所有警告和診斷信息。
總結
以上是生活随笔為你收集整理的『ssh』使用shell远程执行命令的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 博阅电纸书_博阅7.8寸电纸书安卓系统,
- 下一篇: 火狐怎么导入收藏夹_Firefox如何将