雑多なインフラエンジニア日記

技術ブログでっす~

psshとかpslurpとか

大量のサーバを管理していて、共通設定のファイルを配布したり、ディレクトリの
権限変更したり、ちょっとした一斉作業に便利なコマンドpsshについてメモ。

だいぶ、今更な話ですいませんw

同時に一斉実行ですので、sshをforなどでループするより遥かに早いです。
あと、capistranoのレシピ書くほどではない作業にはもってこいです。

前提

pythonがインストールされていること
・ノーパスワードでサーバ間のsshログインが可能なユーザが居ること
http://kenknown.blog42.fc2.com/blog-entry-92.html

導入

wget https://parallel-ssh.googlecode.com/files/pssh-2.2.2.tar.gz
tar xfz pssh-2.2.2.tar.gz 
cd pssh-2.2.2
python ez_setup.py
python setup.py install


使い方

pssh -h [リストファイル] -l [実行ユーザ] -i '実行コマンド'


ストファイルには、ホスト名またはIPアドレスの一覧が記述されていればOKです。
SSHのポートが22以外なら、ホスト名:ポート番号 で記述して下さい。

(実行例) ホスト名とApacheのプロセス数を取得。ついでにtimeで時間計測

$ time pssh -h /tmp/hosts.list -l user01 -i 'hostname ; ps -ef|grep [h]ttpd | wc -l ; printf "\n"'
[1] 18:39:18 [SUCCESS] 172.168.142.139
test-web002
14

[2] 18:39:18 [SUCCESS] 172.168.161.23
test-web001
24

[3] 18:39:18 [SUCCESS] 172.168.142.211
test-web005
14

[4] 18:39:18 [SUCCESS] 172.168.163.23
test-web003
14

[5] 18:39:18 [SUCCESS] 172.168.163.21
test-web004
14

[6] 18:39:18 [SUCCESS] 172.168.162.18
test-web009
14

[7] 18:39:18 [SUCCESS] 172.168.161.59
test-web008
14

[8] 18:39:18 [SUCCESS] 172.168.147.101
test-web010
14

[9] 18:39:18 [SUCCESS] 172.168.150.247
test-web007
14

[10] 18:39:18 [SUCCESS] 172.168.160.53
test-web006
14


real    0m0.394s
user    0m0.261s
sys     0m0.135s
$


表示順序はリストファイルに記述されている順序ではなく、レスポンスが返って
来た順で表示されるようです。(ちょっと見にくい)

あと、戻り値が0以外を返す場合、SUCCESS が ERROR になります。
diffで差分があることを確認したい場合などですね。
メッセージ表示だけの問題で、コマンドは実行されます。

pslurp

一括でファイル収集する pslurp なんかも使えると思います。
ファイル収集される場所が、サーバ名ディレクトリ配下になるのが難点かも知れませんが。。

$ pslurp -H test01 -l user01 -L /tmp/work -r /usr/local/nagios/etc/nrpe.cfg nrpe.cfg
[1] 19:19:19 [SUCCESS] test01
$ ll
total 4
drwxrwxr-x 2 user01 user01 4096 Dec 20 19:19 test01
$ ll test01/
total 4
-rw-r--r-- 1 user01 user01 2906 Dec 20 19:19 nrpe.cfg
$


冒頭で述べた通り、ちょっとした作業には威力を発揮しますね。


・参考
http://oss.fulltrust.co.jp/doc/centos6.3/pssh.html


以上です。