简介:
pssh全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具,它支持文件并行复制、远程并行执行命令、杀掉远程主机上的进程等
获取pssh:
wget https://pypi.python.org/packages/60/9a/8035af3a7d3d1617ae2c7c174efa4f154e5bf9c24b36b623413b38be8e4a/pssh-2.3.1.tar.gz
安装pssh:
[root@localhost ~]# tar -zxvf pssh-2.3.1.tar.gz
[root@localhost ~]# cd pssh-2.3.1
[root@localhost ~]#python setup.py install (注:pssh基于python2编写,不要使用python3安装,否则无法使用)
创建单向互信:
[root@localhost ~]#ssh-keygen -t rsa (全部使用默认值即可,在/root/.ssh下生成id_rsa私钥,id_rsa.pub公钥)
[root@localhost ~]#ssh-copy-id [email protected] (将公钥内容拷贝至被管理主机的/root/.ssh/authorized_keys下)
[root@localhost ~]#pssh -H 192.168.1.100 "date" (测试互信,如果返回主机时间则表示成功)
自动批量添加互信脚本:
[root@localhost ~]#yum install -y sshpass
[root@localhost ~]#cat auto_ssh_copy.sh (需要创建host_list主机地址列表,其中root为远端主机密码)
#!/bin/bash
for i in `cat host_list`
do
sshpass -p root ssh $i -o StrictHostKeyChecking=no "date">/dev/null
sshpass -p root ssh-copy-id $i>/dev/null
done
pssh用法:
pssh的用法主要包括如下五个方面:1.pssh命令 在远程主机上执行本地命令或者脚本
2.pscp命令 将本地文件拷贝至多个远端主机
3.pslurp命令 从多台远程机器拷贝文件到本地
4.pnuke命令 并行在远端主机杀进程
5.prsync命令 使用rsync协议从本地计算机同步到远程主机
相关参数
-h –hosts 主机文件列表,内容格式”[user@]host[:port]”
-H –host 单台主机,内容格式”[user@]host[:port]”
-l –user 登录使用的用户名
-p –par 并发的线程数【可选】
-o –outdir 输出的文件目录【可选】
-e –errdir 错误输入文件【可选】
-t –timeout TIMEOUT 超时时间设置,0无限制【可选】
-O –option SSH的选项
-v –verbose 详细模式
-A –askpass 手动输入密码模式
-x –extra-args 额外的命令行参数使用空白符号,引号,反斜线处理
-X –extra-arg 额外的命令行参数,单个参数模式,同-x
-i –inline 每个服务器内部处理信息输出
–inline-stdout 每个服务器的内服输出
-P, –print 打印出服务器返回信息
用例
pscp -h host_list info.sh /home
将本地info.sh文件拷贝至所有远端服务器的/hone目录下
pssh -h host_list "cd /home;sh info.sh>info.log"
执行info.sh将内容保存在远端服务器的info.log文件中
pslurp -h host_list -L /tmp/test /home/info.log info.txt
将远端主机下的/home/info.log拷贝到本地/tmp/test目录下并将文件重命名为info.txt,/tmp/test目录下会自动创建以远端主机ip命名的文件夹,每个文件夹下包括对应的info.txt文件
pssh -h host_list -o /tmp/test -i "cd /home;ls"
显示/home下的内容到本地标准输出,同时输出到/tmp/test目录下,在/tmp/test目录下会自动生成以远端ip命名的文件,每个文件包含对应内容
pnuke -h host_list nginx
杀掉远端主机的nginx进程
prsync -r -h host_list test.log /tmp/test.log
将本地test.log文件内容通过rsync协议同步到远端服务器/tmp/test.log下,该命令需要rsync支持,如rsync包未安装,则使用yum install -y rsync安装
prsync -r -h host_list /software /tmp
将本地/software目录下所有文件同步到远端服务器的/tmp目录下
需要注意的问题:
/root/.ssh目录的默认权限设置为700,id_rsa默认权限600,id_rsa.pub默认权限644,authorized_keys默认权限644,遵循以上权限设置避免出现权限过大而使互信无法生效的问题
对于大规模应用该工具的情况下,建议先用for循环ping列表中的所有主机过滤掉其中一部分无法连通的主机,生成新的主机列表,在新的主机列表中使用pssh -h host_list "date"过滤掉互信存在问题或者ssh服务存在问题的主机,生成最终列表,在最终列表上执行需要执行的命令或者脚本,可以节省一些等待的时间,更快的得到相关结果