在 Linux 或 FreeBSD 系統底下,如何下達 command 來達到多方控管機器,在網路上找到 Fanout and fanterm 這兩套軟體,可以實現我想要的目的,在 FreeBSD 有把 sysutils/fanout 進到 ports 裡面,安裝方式很簡單,就直接 make install clean 就可以了,用法也很簡易:
Usage: /usr/local/bin/fanout "MACHINES" "commands and parameters to run on each machine" /usr/local/bin/fanout -h #Show this help /usr/local/bin/fanout --noping # Do not ping before running command當然事情沒有這麼簡單,因為是透過 SSH 方式去對其他機器下 command,所以作者都把預設 port 設定成 22,沒有完整考慮到其他環境,管理重要的 Server 怎麼會設定 22 阿,一定會改掉的阿,後來檢查一下 /usr/local/bin/fanout 這隻程式,並非編譯過的 binary 檔案,所以打開來看,就是利用 bash shell script 所寫的程式,網路上 Google 也找到一篇
Does anyone know how to specify a ssh port number with fanout? 文章,但是最後我是自己把 bash 改成支援可調整 port,也就是 MACHINES 可以放入:ip:portt or hostname:port patch 檔案:需要的就拿去 patch 就可以用了
--- /usr/local/bin/fanout 2010-01-08 15:06:47.000000000 +0800 +++ fanout 2010-01-08 15:00:04.000000000 +0800 @@ -53,13 +53,22 @@ STARTTIME=`date` for ONETARGET in $TARGETS ; do case $ONETARGET in - *@*) #user@machine form + *@*) #user@machine:port form ONEUSER="-l ${ONETARGET%%@*}" - ONEMACH=${ONETARGET##*@} - HEADER="==== As ${ONETARGET%%@*} on $ONEMACH ====" + SERVER=${ONETARGET##*@} + HOST=`echo $SERVER | awk -F: '{ printf $1 }'` + PORT=`echo $SERVER | awk -F: '{ printf $2 }'` + if [ "$PORT" != "" ]; then + ONEPORT="-p ${PORT}" + else + ONEPORT="" + fi + ONEMACH=${HOST} + HEADER="==== As ${ONEUSER} on $ONEMACH port: ${PORT}====" ;; *) #just machine form ONEUSER="" + ONEPORT="" ONEMACH=$ONETARGET HEADER="==== On $ONEMACH ====" ;; @@ -74,7 +83,7 @@ if [ "$PING" = "NO" ] || ping -c 3 $ONEMACH >/dev/null 2>/dev/null ; then echo Starting $ONETARGET >/dev/stderr #Machine is reachable #Show machine name header, show command output, indented two spaces, save all to a temp file. - ( echo $HEADER ; ssh -n $ONEUSER $ONEMACH "$*" | sed -e 's/^/ /' ; echo ) >$TMPFILE & + ( echo $HEADER ; ssh $ONEPORT -n $ONEUSER $ONEMACH "$*" | sed -e 's/^/ /' ; echo ) >$TMPFILE & else echo $ONETARGET unavailable >/dev/stderr #Machine not responding echo $HEADER ; echo "==== Machine unreachable by ping" ; echo >$TMPFILE
See also
- OpenSSH 安全性漏洞 CVE-2016-0777 and CVE-2016-0778
- 安裝 XCache 加速 PHP 執行速度
- 好用 PHP debug extension Xdebug on FreeBSD 安裝
- [FreeBSD] 利用 fsck 指令修復不正常斷電關機
- ProFTPD UseEncoding 繁體中文亂碼解決 Localization
- [FreeBSD] update apache -> 2.2.15, PHP -> 5.3.2, and MySQL downgrade to 5.1.9
- Apache 取得透過 Reverse Proxy (Varnish) 的 Client 真正 IP (mod_rpaf)
- [Vim] 想套用 *.php syntax 顏色於 *.ros
- [FreeBSD] DenyHosts 設定在 hosts.allow 注意事項
- [UNIX] Vim 命令圖解說明