以前远程查看或传输文件都用ssh或rsync后来听人介绍了pssh,从网上查到它是并行传输的,所以速度更快,使用python写的。

安装完后会有5个命令

用途

pssh 在多个主机上并行地运行命令。
pscp 把文件并行地复制到多个主机上。
prsync 通过 rsync 协议把文件高效地并行复制到多个主机上。
pslurp 把文件并行地从多个远程主机复制到中心主机上。
pnuke 并行地在多个远程主机上杀死进程。


#yum -y install python

pssh安装
# wget https://parallel-ssh.googlecode.com/files/pssh-2.3.tar.gz
# tar zxvf pssh-2.3.tar.gz
# cd pssh-2.3
# python setup.py build
# python setup.py install

建立简单ssh密钥登陆
# ssh-keygen
# rsync -azv /root/.ssh/id_rsa.pub  [email protected]:/root/.ssh/authorized_keys2
这样99就能直接登陆98了

测试
[root@test-server ~]# pssh -P -h host.txt hostname
192.168.0.98: test2
[1] 00:10:06 [SUCCESS] 192.168.0.98


pssh -P -h host.txt --outdir=/root/abc/ -t 3600 yum -y install vsftpd

#--outdir=路径,将结果输入到一个文件

#-t 时间,默认60秒



下面内容来自网络

2.配置密钥,免密码访问管理机器

在使用之前需要配置密钥访问,如下:

#ssh-keygen #一直回车
#复制公钥到远端服务器
#ssh-copy-id -i .ssh/id_rsa.pub [email protected]

ps.如果端口不是默认22 ,需要使用:ssh-copy-id -i .ssh/id_rsa.pub  ”-p 4567 [email protected]


3:运行第一条命令,查看启动时间

]# pssh -h servers.txt -l root -P uptime
173.16.0.102:  13:14:57 up 1 day,  2:00,  1 user,  load average: 0.00, 0.00, 0.00
173.16.0.100:  13:23:34 up 21:40,  1 user,  load average: 0.00, 0.00, 0.00
[1] 13:13:52 [SUCCESS] 173.16.0.102
[2] 13:13:52 [SUCCESS] 173.16.0.100

4:删除文件

我需要删除以前yum.repo 文件

pssh -h servers.txt  -P "rm -r /etc/yum.repos.d/*.repo"

5:传输单个文件

pscp -h servers.txt /etc/yum.repos.d/ftp.repo /etc/yum.repos.d/
6:运行yum update

]# pssh -h servers.txt -l root -P "yum update"

173.16.0.100: Loaded plugins: fastestmirror
173.16.0.102: Loaded plugins: fastestmirror
173.16.0.100: Loading mirror speeds from cached hostfile
173.16.0.102: Loading mirror speeds from cached hostfile
173.16.0.100: Setting up Update Process
173.16.0.102: Setting up Update Process
173.16.0.100: No Packages marked for Update
173.16.0.102: No Packages marked for Update
[1] 13:38:13 [SUCCESS] 173.16.0.100
[2] 13:38:13 [SUCCESS] 173.16.0.102

7:让机器加载Ext4

]# pssh -h servers.txt -l root -P "modprobe ext4"
[1] 13:49:42 [SUCCESS] 173.16.0.100
[2] 13:49:42 [SUCCESS] 173.16.0.102

8:安装e4fsprogs, 支持ext4分区
[root@gluster02b ~]# pssh -h servers.txt -l root -P "yum -y install e4fsprogs"
173.16.0.102: Loaded plugins: fastestmirror
173.16.0.100: Loaded plugins: fastestmirror
173.16.0.100: Complete!
[1] 13:53:11 [SUCCESS] 173.16.0.100
173.16.0.102:

Installed:
 e4fsprogs.x86_64 0:1.41.12-2.el5

173.16.0.102: Complete!
[2] 13:53:11 [SUCCESS] 173.16.0.102

9:创建一个目录

# pssh -h servers.txt -l root -P "mkdir /data01"
[1] 09:53:27 [SUCCESS] 173.16.0.100
[2] 09:53:27 [SUCCESS] 173.16.0.102
# pscp -h servers.txt /etc/fstab /etc/
[1] 09:53:51 [SUCCESS] 173.16.0.102
[2] 09:53:51 [SUCCESS] 173.16.0.100


10:复制文件夹到远程

# pscp -h servers.txt -r /root/tools/ /root/
[1] 10:23:27 [SUCCESS] 173.16.0.100
[2] 10:23:28 [SUCCESS] 173.16.0.102


11:关闭Selinux

# pssh -h servers.txt -l root -P "sed -i '/SELINUX=enforcing/s/SELINUX=enforcing/SELINUX=disabled/' /etc/sysconfig/selinux"
[1] 11:47:15 [SUCCESS] 173.16.0.100
[2] 11:47:15 [SUCCESS] 173.16.0.102


# pssh -h servers.txt -l root -P init 6
[1] 11:47:28 [SUCCESS] 173.16.0.102
[2] 11:47:28 [SUCCESS] 173.16.0.100
# pssh -h servers.txt -l root -P sestatus
[1] 11:49:37 [FAILURE] 173.16.0.100 Exited with error code 255
[2] 11:49:37 [FAILURE] 173.16.0.102 Exited with error code 255


# pssh -h servers.txt -l root -P sestatus
173.16.0.100: SELinux status:                 disabled
[1] 11:52:32 [SUCCESS] 173.16.0.100
173.16.0.102: SELinux status:                 disabled
[2] 11:52:32 [SUCCESS] 173.16.0.102


http://sheriy.com/?p=748

http://www.theether.org/pssh/docs/0.2.3/pssh-HOWTO.html


== 简介 ==
pssh是一个python编写可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的,类似pdsh,个人认为相对pdsh更为简便,使用必须在各个服务器上配置好密钥认证访问。
项目地址:https://code.google.com/p/parallel-ssh/

PSSH provides parallel versions of OpenSSH and related tools. Included are pssh, pscp, prsync, pnuke, and pslurp. The project includes psshlib which can be used within custom applications. The source code is written in Python and can be cloned from:

git clone http://code.google.com/p/parallel-ssh/

PSSH is supported on Python 2.4 and greater (including Python 3.1 and greater). It was originally written and maintained by Brent N. Chun. Due to his busy schedule, Brent handed over maintenance to Andrew McNabb in October 2009.


== 下载安装 ==

下载

[plain] view plain copy print ?
  1. wget http://parallel-ssh.googlecode.com/files/pssh-2.3.1.tar.gz  


安装
[plain] view plain copy print ?
  1. tar xf pssh-2.3.1.tar.gz  

  2. cd pssh-2.3.1/  

  3. python setup.py install  


== 参数命令介绍 ==


'''介绍pssh参数'''
 pssh   在多个主机上并行地运行命令

      -h 执行命令的远程主机列表  或者 -H user@ip:port  文件内容格式[user@]host[:port]

      -l 远程机器的用户名

      -P 执行时输出执行信息

      -p 一次最大允许多少连接
      -o 输出内容重定向到一个文件
      -e 执行错误重定向到一个文件
      -t 设置命令执行的超时时间
      -A 提示输入密码并且把密码传递给ssh
      -O 设置ssh参数的具体配置,参照ssh_config配置文件
      -x 传递多个SSH 命令,多个命令用空格分开,用引号括起来
      -X 同-x 但是一次只能传递一个命令
      -i 显示标准输出和标准错误在每台host执行完毕后

'''其他命令'''

       pscp     传输文件到多个hosts,类似scp

       pslurp   从多台远程机器拷贝文件到本地

       pnuke    并行在远程主机杀进程

       prsync   使用rsync协议从本地计算机同步到远程主机

== 实例 ==
pssh
[plain] view plain copy print ?
  1. $ pssh -h ip.txt -l root chkconfig --level 2345 snmpd on  

  2. [1] 10:59:29 [SUCCESS] ... ...  

  3. [2] 10:59:29 [SUCCESS] ... ...  

  4. [3] 10:59:29 [SUCCESS] ... ...  

  5. ... ...  


pscp
[plain] view plain copy print ?
  1. $ pscp -h ip.txt -l root /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf  

  2. [1] 11:00:42 [SUCCESS] ... ...  

  3. [2] 11:00:42 [SUCCESS] ... ...  

  4. [3] 11:00:42 [SUCCESS] ... ...  

  5. ... ...  


参考:http://my.oschina.net/guol/blog/59977


(一) 使用前提

中心主机连接远程主机可以通过ssh密钥无密码连接

(二) 命令格式

pssh 总是通过清单 文件指定主机

其中的每行采用 [user] host[:port] 形式。

(三) 创建servers.txt文件

文件的内容为远程主机的ip,和用于连接ssh的用户名和端口

# vim /home/server.txt

192.168.0.177

[email protected]:22031

(四) pssh用法-在多个主机上并行地运行命令

# pssh -P -h /home/server.txt hostname

在默认情况下,每个命令实例的输出出现在 stdout 中。输出划分为每个主机一段。但是,可以指定一个目录来捕捉每个实例的输出。例如,如果运行前面的命令并添加 --outdir=/opt/output/,那么会把每个主机的命令输出捕捉到/opt/output/ 中单独的文件中

# pssh -P -h /home/server.txt --outdir=/opt/output/ hostname


# ll /opt/output/


# cat /opt/output/192.168.0.177

Standby

pssh可以生成最多 32 个进程,并行地连接各个节点。如果远程命令在 60 秒内没有完成,连接会终止。如果命令需要更多处理时间,可以使用 -t 设置更长的到期时间。(parallel-scp 和 parallel-rsync 没有默认的到期时间,但是可以用 -t 指定到期时间。)

(五) pscp用法-把文件或者目录并行地复制到多个主机上

# pscp -h /home/server.txt /home/server.txt /opt /qubaoquan


其中/home/server.txt 为本地目录 /opt/qubaoquan为文件名,即server.txt复制到远端后重名为qubaoquan,如果不指定远端文件名只有目录则保持原文件名

也可以复制整个目录到远端

# ll /srv/test


# pscp --recursive -h /home/server.txt /srv/test /opt


(六) pslurp用法-把文件或者目录并行地从多个远程主机复制到中心主机上

它从每台远程计算机收集指定的文件,但是并不覆盖文件的本地版本。pslurp 为每台远程计算机创建一个子目录并把指定的文件复制到此位置

# # pslurp --recursive -h /home/server.txt /etc/passwd /qubaoquan


/etc/passwd 为远程文件 /qubaoquan为本地目录,也可以为拷贝到本地后的文件名.

# tree /qubaoquan/


# pslurp --recursive -h /home/server.txt -L /srv/test/ /srv llll

其中 --recursive表示递归子目录,-L 选项指定创建子目录的位置,/srv为远程目录,lll为拷贝到本地后的目录名,看目录结构就知道了

#tree /srv/test/


(七) pnuke用法-并行地在多个远程主机上杀死进程

pnuke 相当于运行 ssh host killall。pnuke 的参数是一个模式。在远程计算机上运行的名称符合这个模式的所有进程都被杀死。可以用此命令方便地在一组服务器上停止同一守护进程。

# pnuke -h /home/server.txt --user=root cron


命令的结果则是在server.txt文件中指定的主机上执行killall cron命令 其中cron为匹配到cron的进程,只要ps进程中出现相关词语 都能杀死


192.168.12.4


vi host_list.txt




magic@shopex ~]$ pscp -h host_list.txt iptables /home/magic/.

[magic@shopex ~]$ pscp -h host_list.txt squid.conf /home/magic/.

[magic@shopex ~]$ pscp -h host_list.txt zabbix_agentd.conf /home/magic/.

[magic@shopex ~]$ pscp -h host_list.txt replace.sh /home/magic/.  

[magic@shopex ~]$ pssh -x "-t -t"  -h host_list.txt -P "/home/magic/squid.sh"




pscp -h host_list.txt crontab /home/magic/.



pscp -h host_list.txt crontab /root/.



pssh  -h host_list.txt -P "crontab /root/crontab"


pssh -x "-t -t"  -h host_list.txt -P "sudo crontab /home/magic/crontab"


pssh -x "-t -t"  -h host_list.txt_bk  -P "cp  /home/magic/squid.conf  /usr/local/squid-3.1.16/etc/."


pssh -x "-t -t"  -h host_list.txt_bk  -P "sudo /usr/local/squid-3.1.16/sbin/squid  -k  reconfigure"


pssh -x "-t -t"  -h host_list.txt  -P "cp  /root/squid.conf  /usr/local/squid-3.1.16/etc/."


pssh -x "-t -t"  -h host_list.txt  -P "/usr/local/squid-3.1.16/sbin/squid  -k  reconfigure"