2017年3月25日 星期六

利用shell同時執行遠方主機群命令

工作目的:

  • OS:FreeBSD i386 , 10.3-RELEASE-p11
  • CPU:Intel(R) Core(TM)2 Duo CPU @ 3.00GHz
  • RAM:4096 MB

ssh 執行遠方主機

有的時候不是懶,是效率問題。
基於安全機制,很多服務主機並未直接對外連線,只能經由授權連線的IP或主機再轉入進行維護。
當然只有幾台時,沒遇到困難及問題;然而當主機群數量幾十台甚或幾百台的規劃時,效率還有精確就是要好生思量了。
所以利用/etc/hosts檔案內容及sudo命令,簡單作一個script來幫忙吧!

#!/bin/sh
# file : execCmdAll.sh
# Execute command on all remote machines

# 檢查有無輸入命令
if [  -z "$1" -a "$1" == " " ]; then 
echo "Input Command for remote machines to execute!"
exit 1
fi
u=0

#找出10.開頭的內網ip主機
for myhost in `grep "^10\." /etc/hosts |awk 'BEGIN{ORS=" "}{print $1}'`;do
let ++i
# 每台都要有sudo權限
ssh ${myhost} sudo $1
# 美化輸出
echo -e "\033[0;92m#${i} \033[0mexecuting \033[1;93m$1 for \033[42m${zzhost} \033[0m"
done

活本來沒有什麼好與壞,只要你願意怎樣填滿它,它就隨同而行。


EmoticonEmoticon