Polysh批量管理伺服器
by:鐵樂與貓
目錄
注:文章下面涉及到ip地址和埠的敏感資訊用了x處理代替。讀者使用時可自行替換自己環境中的ip地址和埠。
用途
用在跳板機上(ssh免密登入),然後一條命令可以傳送到多臺機器執行後並在這一臺機器上顯示結果。分散式架構下,一個服務部署在多臺機器下的運維必備利器。
安裝
Polyshis written in Python and requires Python ≥ 2.4.
pip install polysh
或訪問 https://pypi.org/project/polysh/#description
wget http://guichaz.free.fr/polysh/files/polysh-x.x.tar.gz
tar -zvxf polysh-x.x.tar.gz
cd polysh-x.x
python setup.py install --home=~
# --home 生產機器環境一般有嚴格許可權管理,這時可以指定到登入者的home目錄下進行安裝,避免許可權導致的安裝失敗。不指定該引數的話,安裝後命令檔案會出現在/bin/polysh和/usr/local/bin/polysh
注意,生產環境一般安裝在跳板機(堡壘機)上。
配置(選做)
系統變數
成功安裝後,會在home引數配置的目錄下生成bin目錄(按照上述步驟即~/bin)和其目錄下的polysh指令檔案。將該bin目錄配置到~/.bash_profile
例:
vim ~/.bash_profile
PATH=$PATH:$HOME/bin:/usr/local/polysh/bin
免密登入
可以避免連線多臺機器時對各機器密碼的管理,達到更高效的便捷使用。需要把polysh所在機器的~/.id_rsa.pub
(公鑰)內容配置到所需連線的機器上來完成免密登入。
如果本機不存在~/.ssh/id_rsa.pub
檔案,需通過ssh-keygen -t rsa
來建立本機的公私鑰檔案。(預設生成無需輸入任何引數,三次回車即可)
執行後,id_rsa(私鑰檔案)和id_rsa.pub(公鑰檔案)出現在~/.ssh/
資料夾下。
將id_rsa.pub內容複製在其他連線機器的./ssh/authorized_keys
另:ssh公鑰生效需滿足至少下面兩個條件:
- 使用者
.ssh
目錄許可權為700 .ssh/authorized_keys
檔案許可權為600
~/.ssh/目錄下的檔案說明:
authorized_keys —— 存放遠端免密登入的公鑰,主要通過這個檔案記錄多臺機器的公鑰。
id_rsa —— 生成的私鑰檔案。
id_rsa.pub —— 生成的公鑰檔案。
know_hosts —— 已知的主機公鑰清單。
使用
伺服器名方式
例1:{}包括,適合少數伺服器
(venv) [root@cgw2]# polysh czeus_web{1,2}
ready (2)> nc -v -w 10 -z 10.17.2.x 11x
czeus_web2 : Connection to 10.17.2.x 11x port [tcp/memcache] succeeded!
czeus_web1 : Connection to 10.17.2.x 11x port [tcp/memcache] succeeded!
例2:單引號配合<>,適合多臺伺服器
[root@cgw2 polysh-home]# polysh --ssh='exec ssh -p 2x' 'cevony<1-30>'
ready (30)>
檔案方式(--hosts-file)
例:建立~/host.list
# 檔案每一行為ip地址或域名,推薦用域名,這樣提示更明顯
10.17.2.x
10.17.2.x
10.17.2.x
儲存,之後想用則執行命令:
polysh --host-file=host.list
注:比較新的版本選項己改成了:
polysh --hosts-file FILE
Control commands are prefixed by ":".
[-h] [--hosts-file FILE] [--command CMD] [--ssh SSH] [--user USER]
[--no-color] [--password-file FILE] [--log-file LOG_FILE]
[--abort-errors] [--debug] [--profile]
[host_names [host_names ...]]
# 例:
# polysh --hosts-file memcache_public_host.list
例,批量伺服器用nc命令掃描:
(venv) [root@cgw2 polysh-home]# polysh --hosts-file czeus_memcache1.list
ready (15)> nc -w 4 -v czeus_memcached1 11x
czeus_memcached2 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_memcached3 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php6 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_memcached4 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_proxy1 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_web2 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_web5 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_web6 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php1 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php3 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php7 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php4 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php5 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_web1 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
czeus_php2 : Connection to czeus_memcached1 11x port [tcp/memcache] succeeded!
退出
執行exit
或同時按 Crtl+z
。
注
如ssh的埠有變,不是預設的22埠,需指定ssh的埠命令如下:
polysh --ssh='exec ssh -p 2x' czeus_web{1,2}
同理,在--ssh中 通過exec ssh -i 指定金鑰檔案。
如果不執行上面的命令,會出現error:
(venv) [root@cgw2 polysh-home]# polysh czeus_web{1,2}
Error talking to czeus_web2
Error talking to czeus_web1