昨天的一篇文章,关于ssh命令的几个使用小技巧(r11笔记第27天),也收到了不少朋友的反馈,其中有个朋友提议说还是用pssh吧,我想想也是。
对于pssh早有耳闻,但是一直没有尝试用过。自己体验了一番,感觉确实不错,对于我们日常碰到的批量操作都可以胜任。当然还有很多可选方式,比如pgm,fabric,puppet,ansible等,只要能实现需求,怎么玩都是套路,而且也急不得,一个学明白了学其他的就会容易很多。
关于pssh的p是什么含义,我和朋友还讨论过,到底是python还是parallel的意思,其实按照官网的意思是parallel,当然它是用python写的。查看官网目前较新的版本是2.3.1,可以参考如下链接:
https://pypi.python.org/pypi/pssh/2.3.1
下载得到的不是rpm包,而是一个tar.gz的包,解压以后,直接执行如下的命令即可完成安装的过程。
# python setup.py install
其实这个pssh还有很多附加的功能pscp,prsync,pslurp,pnuke等。
比如我们有几台服务器需要做一些相同的检查。
服务器列表我们提供一个文件test.txt
10.12.133.125
10.12.2.102
10.12.2.32
比如想批量查看主机名的情况,那么执行的结果如下:
# pssh -h test.txt -i "hostname"
[1] 17:41:44 [SUCCESS] 10.12.133.125
newtest.oracle.com
[2] 17:41:44 [SUCCESS] 10.12.2.102
bill_10.12.2.102_sx
[3] 17:41:44 [SUCCESS] 10.12.2.32
snewtest2.oracle.com
如果想先显示结果再显示检测情况,可以使用-P选项。
# pssh -h test.txt -P "hostname"
10.12.133.125: newtest.oracle.com
[1] 17:42:08 [SUCCESS] 10.12.133.125
10.12.2.102: bill_10.12.2.102_sx
[2] 17:42:08 [SUCCESS] 10.12.2.102
10.12.2.32: snewtest2.oracle.com
[3] 17:42:08 [SUCCESS] 10.12.2.32
当然这只是开始,比如想查看一下服务器的uptime情况,超时时间为10秒,对于那些服务器访问不通的情况,情况就会大大改善。
# pssh -h test.txt -t 10 -i uptime
如果服务器有100台,使用如上的方式就会瞬间导致服务器的进程数暴增,如果成千上万台服务器,后果不堪设想,其实我们想让这个过程更平滑一下,那就是使用-p选项,指定并行进程数,比如指定并行进程数为20个,这样就是一个动态控制的过程。
# pssh -h test.txt -t 10 -p 20 -i uptime
如果服务器不算太多,可以使用传入变量的方式,而不适用IP列表。
# pssh -H "10.12.133.125 10.12.2.32" -i uptime
[1] 23:22:35 [SUCCESS] 10.12.133.125
23:19:59 up 268 days, 6:53, 0 users, load average: 0.07, 0.10, 0.28
[2] 23:22:35 [SUCCESS] 10.12.2.32
23:04:38 up 220 days, 8:43, 1 user, load average: 0.22, 0.24, 0.25
大体的使用情况就是上面这样,基本达到的效果就是一个服务器能够通过ssh操作,那么放大到100台,1000台,从客户端来说操作复杂度没有太大的差别。
pssh这个工具蛮有意思,在安装的目录下有个AUTHORS的文件,作者是两个。
# less AUTHORS
Andrew McNabb <amcnabb at mcnabbs.org>
Brent Chun <bnc at theether.org>
而我自己也简单看了下pssh的实现代码,说实话,python还是小白,但是从Java学习的基础来看,有些代码大体还是能基本看懂,代码不是很长,所以我打印出来准备抽空好好看看。
pssh的核心部分有几个文件,pssh和几个库文件,manage.py,task.py,psshutil.py,还有辅助的cli.py,color.py,askpass_client.py,askpass_server.py
简单总结了下,Andrew写了不少的内容,而且近些年的维护都是他。
# Copyright (c) 2009-2012, Andrew McNabb
manager.py
task.py
askpass_client.py
askpass_server.py
而早期的时候更多的内容是Brent来做,2009年左右交接给了Andrew,所以会看到共同作者。
# Copyright (c) 2009-2012, Andrew McNabb
# Copyright (c) 2003-2008, Brent N. Chun
psshutil.py
color.py
cli.py 可见一个开源的项目能够健康发展至今,还是离不开很多默默奉献的人。
这就印证了一句话: