先说下mussh,mussh 是shell开发的一个小工具,刚学习运维和shell的朋友可以拿来锻炼下,做个工具的二次开发。
[root@devops-ruifengyun ~ ]$ apt-get install mussh
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
下列软件包是自动安装的并且现在不需要了:
kde-l10n-engb kde-l10n-zhcn libffi6:i386 libglib2.0-0:i386
libsystemd-daemon0:i386 libudev1:i386 python-async python-git python-gitdb
python-smmap
Use 'apt-get autoremove' to remove them.
下列【新】软件包将被安装:
mussh
升级了 0 个软件包,新安装了 1 个软件包,要卸载 0 个软件包,有 205 个软件包未被升级。
需要下载 14.4 kB 的软件包。
解压缩后会消耗掉 71.7 kB 的额外空间。
获取:1 http://mirrors.oschina.net/ubuntu/ saucy/universe mussh all 1.0-1 [14.4 kB]
下载 14.4 kB,耗时 0秒 (30.3 kB/s)
Selecting previously unselected package mussh.
(正在读取数据库... 系统当前共安装有 234998 个文件和目录。)
正在解压缩 mussh (从 .../archives/mussh_1.0-1_all.deb) ...
正在处理用于 man-db 的触发器...
正在设置 mussh (1.0-1) ...
[root@devops-ruifengyun ~ ]$
mussh的帮助,会看到他的帮助相当的简单。
咱们直接跑一个例子,首先需要把对端的主机放到一个文件里面。然后mussh 调用-H 识别主机的list列表。
[root@devops-ruifengyun ~ ]$
http://rfyiamcool.blog.51cto.com/
[root@devops-ruifengyun ~ ]$ cat mu.list
10.1.25.46
10.1.25.47
10.1.25.48
10.1.25.49
[root@devops-ruifengyun ~ ]$
[root@devops-ruifengyun ~ ]$
[root@devops-ruifengyun ~ ]$ mussh -H ./mu.list -c 'dir'
10.154.252.46: a.py install.log keepalived-1.2.12
10.154.252.46: epel-release-6-8.noarch.rpm install.log.syslog keepalived-1.2.12.tar.gz
10.154.252.47: install.log install.log.syslog keepalived-1.2.12 keepalived-1.2.12.tar.gz
10.154.252.48: install.log install.log.syslog rs.sh
10.154.252.49: install.log install.log.syslog rs.sh
[root@devops-ruifengyun ~ ]$
[root@devops-ruifengyun ~ ]$
测试他有没有并发的特性。
[root@devops-ruifengyun ~ ]$ time mussh -H ./mu.list -c 'sleep 3;dir'
10.154.252.46: a.py install.log keepalived-1.2.12
10.154.252.46: epel-release-6-8.noarch.rpm install.log.syslog keepalived-1.2.12.tar.gz
10.154.252.47: install.log install.log.syslog keepalived-1.2.12 keepalived-1.2.12.tar.gz
10.154.252.48: install.log install.log.syslog rs.sh
10.154.252.49: install.log install.log.syslog rs.sh
mussh -H ./mu.list -c 'sleep 3;dir' 0.04s user 0.16s system 1% cpu 13.206 total
[root@devops-ruifengyun ~ ]$
果然没有并发执行。。。这也太不咋低了。
mussh支持发送脚本并执行的,在mussh的cli命令行 直接 -C 跟着脚本就可以了。
[root@devops-ruifengyun ~ ]$ time mussh -H ./mu.list -C c.sh
10.154.252.46: a.py install.log keepalived-1.2.12
10.154.252.46: epel-release-6-8.noarch.rpm install.log.syslog keepalived-1.2.12.tar.gz
10.154.252.47: install.log install.log.syslog keepalived-1.2.12 keepalived-1.2.12.tar.gz
10.154.252.48: install.log install.log.syslog rs.sh
10.154.252.49: install.log install.log.syslog rs.sh
mussh -H ./mu.list -C c.sh 0.10s user 0.17s system 42% cpu 0.629 total
[root@devops-ruifengyun ~ ]$
[root@devops-ruifengyun ~ ]$
[root@devops-ruifengyun ~ ]$
咱们再来测试下pssh这个比mussh要高端的东西,pssh是python开发的一个用来批量管理linux主机的工具。
pssh相关参数
pssh在多个主机上并行地运行命令
-h 执行命令的远程主机列表,文件内容格式[user@]host[:port]
如 test@172.16.10.10:229
-H 执行命令主机,主机格式 user@ip:port
-l 远程机器的用户名
-p 一次最大允许多少连接
-P 执行时输出执行信息
-o 输出内容重定向到一个文件
-e 执行错误重定向到一个文件
-t 设置命令执行超时时间
-A 提示输入密码并且把密码传递给ssh(如果私钥也有密码也用这个参数)