1,用腳本從信任主機下發命令到多臺主機(不復制文件只執行命令的情況下):
首先需要指定一臺主機作爲信任主機,這樣從這臺主機登錄其他機器就不需要密碼了。
如何設置信任主機(以node1爲例)?
ssh-keygen
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
for host in node{2,3,4,5,6};do echo $host; ssh-copy-id -i /root/.ssh/id_rsa root@$host;done
或者
在信任主機上執行上述命令,紅色IP處填其他機器的IP地址,這樣從信任主機登錄該IP就不需要密碼了。
一個含有其他機器IP地址的hostlist文本文件hostlist,放在信任主機上(和腳本放在同一目錄)
比如你有4臺機器IP地址分別爲192.168.2.1~192.168.2.4
文本文件hostlist可以如下
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
腳本會按行去遍歷hostlist
doCommand 腳本:
#!/bin/sh
doCommand()
{
hosts=`sed -n '/^[^#]/p' hostlist`
for host in $hosts
do
echo ""
echo HOST $host
ssh $host "$@"
done
return 0
}
if [ $# -lt 1 ]
then
echo "$0 cmd"
exit
fi
doCommand "$@"
echo "return from doCommand"
執行命令(記得先對doCommand.sh增加執行權限 chmod u+x doCommand.sh)
./doCommand.sh “ls -al /root/”
這樣該腳本就會在每臺機器上執行”ls -al /root/”這個命令,並返回結果在信任主機上。
2、使用pyhon工具pssh:
工具下載地址:http://www.theether.org/pssh/ 下載需要的版本tar或者rpm包(以 pssh-1.4.3.tar.gz 爲例):
上傳到指定目錄下並解壓,進入pssh-1.4.3/ 即可通過命令:
bin/pssh -h hostlist -l username -o 日誌輸出路徑 執行命令
也可以先配置對應的環境變量;然後直接通過命令執行:
pssh -h hostlist -l username -o 日誌輸出路徑 執行命令
bin下邊的幾個腳本作用說明:
pssh:在遠程多臺主機上並行運行命令
pscp :把文件並行複製到多臺遠程主機上
prsync:使用rsync協議本地文件同步到遠程多臺主機上。
pnuke:在遠程多臺主機上並行killall某一進程
pslurp:把文件從遠程多臺主機上覆制到本地主機上
參數:
--version:查看版本
--help:查看幫助,即此信息
-l --user username (OPTIONAL)
-h:主機文件列表,內容格式”[user@]host[:port]”
-H:主機字符串,內容格式”[user@]host[:port]”
-:登錄使用的用戶名
-p:併發的線程數【可選】
-o:輸出的文件目錄【可選】
-e:錯誤輸入文件【可選】
-t:TIMEOUT 超時時間設置,0無限制【可選】
-O:SSH的選項
-v:詳細模式
-A:手動輸入密碼模式
-x:額外的命令行參數使用空白符號,引號,反斜線處理
-X:額外的命令行參數,單個參數模式,同-x
-i:每個服務器內部處理信息輸出
-P:打印出服務器返回信息
來自: http://man.linuxde.net/pssh
例子:
hostlis列表文件:
192.168.2.1
192.168.2.2
192.168.2.3
192.168.2.4
在每臺主機 /tmp下創建文件夾test_dir:
pssh -h hostlist "mkdir /tmp/test_dir" (不加-l 默認當前登錄用戶)
複製當前目錄下的command.sh 文件到每臺主機的 /tmp/test_dir 目錄下:
pscp -h hostlist -l root command.sh /tmp/test_dir/
刪除每臺主機剛剛創建的目錄:
pssh -h hostlist -l carpo -o ./out "rm -rf /tmp/test_dir"