pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,使用必须在各个服务器上配置好密钥认证访问。
yum install pssh -y
# 安装setuptools包,如果安装了跳过 wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz --no-check-certificate tar -xf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py build python setup.py install # 安装pssh cd - wget http://www.theether.org/pssh/pssh-1.4.3.tar.gz cd pssh-1.4.3/python setup.py install
pssh 在多个主机上并行运行命令
pscp 把文件并行复制到多个主机上
prsync 通过rsync协议把文件高效并行复制到多个主机上
pslurp 把文件并行地从多个远程主机复制到中心主机上
pnuke 并行地在多个远程主机上杀死进程
pssh: 查询远程主机的信息
pssh Usage: pssh [OPTIONS] -h hosts.txt prog [arg0] .. -h --hosts 主机文件列表,格式"host[:port] [user]" -l --user 用户名 -p --par 并发线程数 -o --outdir 输出的文件目录 -e --errdir 错误输出的文件目录 -t --timeout 设置命令执行超时时间 -1表示无限制 --options 设置ssh的一些选项 -v --verbose 详细模式 -P --print 打印出输出执行信息 -i --inline 在每台host执行完毕后,显示出输出信息 Example: pssh -h nodes.txt -l irb2 -o /tmp/pssh uptime [root@localhost ~]# cat /etc/pssh_hosts web1.jiajie.com web2.jiajie.com web3.jiajie.com
“-O”参数,后面跟 的“StrictHostKeyChecking=no”是sshd服务的配置文件ssh_config 中的一个选项,通过设置这个参数,可以让远程主机自动接受 本地主机的hostkey。第一次执行必须指定,不然命令不能执行。
[root@localhost ~]# pssh -i -O "StrictHostKeyChecking=no" -h /etc/pssh_hosts ‘date‘ [1] 09:56:38 [SUCCESS] web1.jiajie.com 222017年 10月 17日 星期二 09:56:38 CST [2] 09:56:38 [SUCCESS] web2.jiajie.com 222017年 10月 17日 星期二 09:56:38 CST [3] 09:56:38 [SUCCESS] web3.jiajie.com 222017年 10月 17日 星期二 09:56:37 CST [root@localhost ~]# pssh -i -h /etc/pssh_hosts ‘uptime‘ [1] 09:59:50 [SUCCESS] web1.jiajie.com 22 09:59:50 up 1:20, 1 user, load average: 0.06, 0.01, 0.00 [2] 09:59:50 [SUCCESS] web3.jiajie.com 22 09:59:49 up 1:20, 2 users, load average: 0.00, 0.01, 0.05 [3] 09:59:50 [SUCCESS] web2.jiajie.com 22 09:59:50 up 1:20, 1 user, load average: 0.06, 0.02, 0.00 [root@localhost ~]# pssh -i -h /etc/pssh_hosts "tar -zxvf pssh-1.4.3.tar.gz" [root@localhost ~]# pssh -i -h /etc/pssh_hosts "rpm -qa httpd|wc -l" [1] 10:20:18 [SUCCESS] web2.jiajie.com 22 0 [2] 10:20:19 [SUCCESS] web1.jiajie.com 22 0 [3] 10:20:19 [SUCCESS] web3.jiajie.com 22 0
pscp: 把文件或者目录并行的复制到多个主机上面
Usage: pscp [OPTIONS] -h hosts.txt local remote -r 递归复制目录 -h 主机文件列表,格式"host[:port] [user]"-l 用户名 -p --par 并发线程数 -o --outdir 输出的文件目录 -e --errdir 错误输出的文件目录 -t --timeout 设置命令执行超时时间 -1表示无限制 -O --options 设置ssh的一些选项 -v --verbose 详细模式 Example: pscp -h hosts.txt -l irb2 foo.txt /home/irb2/foo.txt [root@localhost ~]# pscp -h /etc/pssh_hosts /etc/hosts /tmp/ [1] 10:29:11 [SUCCESS] web2.jiajie.com 22 [2] 10:29:11 [SUCCESS] web1.jiajie.com 22 [3] 10:29:11 [SUCCESS] web3.jiajie.com 22 [root@localhost ~]# pssh -i -h /etc/pssh_hosts "ls -l /tmp/hosts" [1] 10:29:57 [SUCCESS] web1.jiajie.com 22 -rw-r--r-- 1 root root 202 10月 17 10:29 /tmp/hosts [2] 10:29:57 [SUCCESS] web2.jiajie.com 22 -rw-r--r-- 1 root root 202 10月 17 10:29 /tmp/hosts [3] 10:29:57 [SUCCESS] web3.jiajie.com 22 -rw-r--r-- 1 root root 202 10月 17 10:29 /tmp/hosts [root@localhost ~]# pscp -r -h /etc/pssh_hosts /root/shell.sh/ /tmp/ [1] 10:33:18 [SUCCESS] web1.jiajie.com 22 [2] 10:33:18 [SUCCESS] web2.jiajie.com 22 [3] 10:33:18 [SUCCESS] web3.jiajie.com 22
Usage: pslurp [OPTIONS] -h hosts.txt -o outdir remote local -r --recursive recusively copy directories (OPTIONAL) -L --localdir output directory for remote file copies -h --hosts hosts file (each line "host[:port] [login]") -l --user username (OPTIONAL) -p --par max number of parallel threads (OPTIONAL) -o --outdir output directory for stdout files (OPTIONAL) -e --errdir output directory for stderr files (OPTIONAL) -t --timeout timeout (secs) (-1 = no timeout) per host (OPTIONAL) -v --verbose turn on warning and diagnostic messages (OPTIONAL) -O --options SSH options (OPTIONAL) Example: pslurp -h hosts.txt -L /tmp/outdir -l irb2 /home/irb2/foo.txt foo.txt
-L:指定从远程主机拷贝文件放置的目录,拷贝/root/expect.sh文件,并将其重命名为test1. 如果拷贝目录需要使用-r参数:
[root@localhost ~]# pslurp -h /etc/pssh_hosts -L /tmp/ /root/expect.sh test1
[1] 10:44:55 [FAILURE] web1.jiajie.com 22 Received error code of 1
[2] 10:44:56 [FAILURE] web3.jiajie.com 22 Received error code of 1
[3] 10:44:56 [SUCCESS] web2.jiajie.com 22
[root@localhost ~]# ll /tmp/web2.jiajie.com/
总用量 4-rw-r--r-- 1 root root 139 10月 17 10:44 test1
[root@localhost ~]# pslurp -r -h /etc/pssh_hosts -L /tmp/ /root/shell.sh test2
Usage: prsync [OPTIONS] -h hosts.txt local remote -r --recursive recusively copy directories (OPTIONAL) -a --archive use rsync -a (archive mode) (OPTIONAL) -z --compress use rsync compression (OPTIONAL) -h --hosts hosts file (each line "host[:port] [login]") -l --user username (OPTIONAL) -p --par max number of parallel threads (OPTIONAL) -o --outdir output directory for stdout files (OPTIONAL) -e --errdir output directory for stderr files (OPTIONAL) -t --timeout timeout (secs) (-1 = no timeout) per host (OPTIONAL) -v --verbose turn on warning and diagnostic messages (OPTIONAL) -O --options SSH options (OPTIONAL) Example: prsync -r -h hosts.txt -l irb2 foo /home/irb2/foo
prsync的主要作用是通过rsync协议将文件或目录从本地主 机同步到远程多个主机上。
[root@localhost ~]# prsync -h /etc/pssh_hosts -a -r /root/shell.sh /tmp [1] 11:33:26 [SUCCESS] web3.jiajie.com 22 [2] 11:33:26 [SUCCESS] web1.jiajie.com 22 [3] 11:33:27 [SUCCESS] web2.jiajie.com 22
-r:递归复制。
-a:保持文件的属性不变。
-z:压缩文件,一般不推荐。
Usage: pnuke [OPTIONS] -h hosts.txt pattern -h --hosts hosts file (each line "host[:port] [user]") -l --user username (OPTIONAL) -p --par max number of parallel threads (OPTIONAL) -o --outdir output directory for stdout files (OPTIONAL) -e --errdir output directory for stderr files (OPTIONAL) -t --timeout timeout (secs) (-1 = no timeout) per host (OPTIONAL) -v --verbose turn on warning and diagnostic messages (OPTIONAL) -O --options SSH options (OPTIONAL) Example: pnuke -h hosts.txt -l irb2 java
pnuke的主要作用是在远程多主机上并行杀掉某一进程, 相当于killall命令。
可以直接使用pssh 来传递killall命令,这里就不做介绍了。
本文出自 “dianel简单不简单” 博客,请务必保留此出处http://dianel.blog.51cto.com/12170393/1973190
原文地址:http://dianel.blog.51cto.com/12170393/1973190