使用pssh的前提是:必须在本机与其他客户机上配置好密钥认证访问(即ssh无秘钥登录信任关系)

pssh提供OpenSSH和相关工具的并行版本,包括pssh,pscp,prsync,pnuke和pslurp。

该项目包括psshlib,可以在自定义应用程序中使用。pssh是python写的可以并发在多台机器上批量执行命令的工具,它的用法可以媲美ansible的一些简单用法,执行起来速度比ansible快它支持文件并行复制,远程命令执行,杀掉远程主机上的进程等等。杀手锏是文件并行复制,,当进行再远程主机批量上传下载的时候,最好使用它。

pssh用于批量ssh操作大批量机器;pssh是一个可以在多台服务器上执行命令的工具,同时支持拷贝文件,是同类工具中很出色的;比起for循环的做法,更推荐使用pssh!

1、安装pssh

yum安装  (推荐这一种)

# yum install -y pssh


2、pssh参数说明

【比较常用的!!!】

-h      执行命令的远程主机列表文件 

-l        远程机器的用户名

-p       一次最大允许多少连接

-t        设置命令执行的超时时间

-i      显示标准输出和标准错误在每台host执行完毕后

​-H      user@ip:port 文件内容格式[user@]host[:port]

-o       输出内容重定向到一个文件

-e       执行错误重定向到一个文件

​-A      提示输入秘钥并且传递给ssh(注意这个参数添加后只是提示作用,随便输入或者不输入直接回车都可以)

-O      设置ssh参数的具体配置,参照ssh_config配置文件

-x      传递多个SSH 命令,多个命令用空格分开,用引号括起来

-X     同-x 但是一次只能传递一个命令

-I      读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入


3、pssh举例说明

注意:将要操作的机器放在一个列表文件iplist内,默认登录的端口都是22,确保本机已经和这些机器做了ssh无秘钥登陆的信任关系。

1)批量执行命令(pssh命令)

 pssh -t 10 -h iplist -l root  -o /root/pssh.log -i 'uptime'


2)批量上传文件或目录(pscp命令)

(a)批量上传本地文件test.file到远程服务器上的/tmp目录:

pscp -l root -h iplist test.file /tmp/

(b)批量上传本地文件/mnt/test.file、/mnt/aa.file、/mnt/bb.file到远程服务器上的/tmp目录:

pscp -l root -h hosts.txt /mnt/test.file /mnt/aa.file /mnt/bb.file /tmp/

(c)批量上传本地目录/mnt/zhong到远程服务器上的/tmp目录(上传目录需要添加-r参数):

pscp -l root -h hosts.txt -r /mnt/zhong /tmp/

(d)批量上传本地目录/mnt/zhong、/mnt/aa、/mnt/vv到远程服务器上的/tmp目录

pscp -l root -h hosts.txt -r /mnt/zhong /mnt/aa /mnt/vv /tmp/


3)批量下载文件或目录(pslurp命令)

注意:不用担心重名问题,因为pssh已经建立了以文件列表内的ip或者主机名为名称的目录来存放下载的文件

(a)批量下载远程机器的/etc/hosts文件到本机的当前目录

pslurp -l root -h iplist /etc/hosts ./

(b)批量下载远程机器的/etc/hosts文件到到本机的/mnt目录下

cd /mnt/

pslurp -l root -h /tmp/iplist /etc/hosts ./

(c)批量下载远程机器的/home目录到本机的当前目录

 pslurp -l root -h iplist -r /home/ ./


4)批量同步(prsync命令)

注意:批量同步目录操作是将本机对应目录数据同步到远程机器上,远程机器上对于目录下多余的文件也会保留(不会删除多余文件)同步文件的时候,其实就是完全覆盖,远程机器对应文件内的文件会被全部替换!

(a)同步本机的/mnt/test/file文件内容到远程服务器/mnt/test/file文件内

​prsync -l root -h hosts.txt /mnt/test/file /mnt/test/file

(b)同步本机/mnt/test目录下的文件或目录到远程机器的/mnt/test路径下

prsync -l root -h iplist -r /mnt/test/ /mnt/test/


5)批量kill远程机器上的进程(pnuke命令)

(a)比如批量kill掉远程机器上的nginx进程

pnuke -h iplist -l root nginx