PSSH批量运维轻量级工具

简介:

pssh全称是parallel-ssh,基于Python编写的并发在多台服务器上批量执行命令的工具,它支持文件并行复制、远程并行执行命令、杀掉远程主机上的进程等

该工具可以视作ansible的简化版本,不需要安装任何客户端程序,只需要一台控制主机,并保证控制主机与被管理主机之间建立单向互信即可

获取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服务存在问题的主机,生成最终列表,在最终列表上执行需要执行的命令或者脚本,可以节省一些等待的时间,更快的得到相关结果




猜你喜欢

转载自blog.csdn.net/finalkof1983/article/details/79323392