1. 程式人生 > 實用技巧 >Polysh批量管理伺服器

Polysh批量管理伺服器

by:鐵樂與貓

目錄

注:文章下面涉及到ip地址和埠的敏感資訊用了x處理代替。讀者使用時可自行替換自己環境中的ip地址和埠。

用途

用在跳板機上(ssh免密登入),然後一條命令可以傳送到多臺機器執行後並在這一臺機器上顯示結果。分散式架構下,一個服務部署在多臺機器下的運維必備利器。

安裝

Polyshis written in Python and requires Python ≥ 2.4.

pip install polysh

或訪問 https://pypi.org/project/polysh/#description

下載tar原始碼包進行安裝。例:

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

檔案中PATH路徑裡。

例:

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