您的位置:首页 > 运维架构

自动化运维利器---pssh

2015-12-09 16:54 267 查看
有的公司,机房有60台服务器,有的公司机房有3000台服务器,还有的更多!这么多的服务器,要执行相同的系统配置操作,怎么办?
答案1: 一台一台的部署,有点活活累死的感觉!
答案2: 写SHELL脚本,一回车,全部机器就都执行了。是个办法,但是效率很低,不是吗?!
答案3 : 用pssh,它是运维利器啊!

pssh: parallel-ssh ,即并行ssh,是一个用Python编写的工具,作用就是并行在多台服务器上执行命令。比如,在晚上12:00 分这个时间,同时在3000台服务器上执行同一个命令!

pssh是一个非常简单的工具,说白了就是一个小软件!简单好用的小软件!所以,希望你不要一看见陌生的东西,就有“畏生心理”,就不看了,实际上,它是只小蚂蚁,你随时可以掌握它,简单易用!

它的亮点: 文件并行复制、 远程执行并行命令、杀掉远程主机上的进程。这就是我们用它的理由!

(一) 安装pssh这个工具包之前,先干一件事,就是保证本地主机和要管理的远程主机之间的单向信任。说白了,就是要在本地主机和远程所有的服务器上面配置密钥认证访问。
你可以理解为要认识pssh这个姑娘,首先要认识她的闺蜜,通过她的闺蜜,认识pssh!
(1) 在本地主机上创建RSA密钥和公钥
a. 本地主机上以user01用户登录
b. 在 user01的根目录内创建 .ssh 目录并设置读取权限,你 没 看错,ssh前面有个点
$ mkdir ~/.ssh // $ 符号代表是以普通用户登录的

$ chmod 700 ~/.ssh
c. 使用ssh-keygen 命令 生成基于SSH协议的RSA密钥
$ cd ~/.ssh
$ ssh-keygen -t rsa //-t的意思是指定类型(type),rsa类型
ssh-keygen 这个命令执行完后,会提示 保存私钥(key)和公钥(public key)的位置,选择默认值,然后依次按回车键即可。
(2) 整合公钥文件
在本地上继续以user01用户登录,执行如下操作:
$ cd ~/.ssh
$ cat /home/user01/.ssh/id_rsa.pub > authorized_keys

$ chmod 600 ~/.ssh/authorized_keys
$ scp authorized_keys user02@192.168.100.100:/home/user02/.ssh/

上面这4条命令,将本地节点生产的公钥整合到一个authorized_keys文件中,然后进行授权,再然后把authorized_keys复制到所有的远程主机上。这里以user02为例。
(3) 测试SSH密钥认证
在本地上以user01用户登录,然后:
$ ssh user02 date
如果不需要输入密码,就证明SSH单向信任已经配置成功了。说明你已经认识pssh这个姑娘的闺蜜了,剩下的就是这个闺蜜帮你牵线了。

(二) 安装pssh
因为你已经认识了pssh的闺蜜(SSH单向信任),这个闺蜜为你说了不少好话,你可以直接追pssh这个姑娘了。
先在网上下载pssh-1.4.2.tar.gz

# tar -zxvf pssh-1.4.2.tar.gz //用root用户解压

# cd pssh-1.4.2
# python setup.py install //一回车,就OK了。简单吧,安装完成了。多亏了之前认识了她的闺蜜。

(三) pssh应用实例 (和pssh这个姑娘相处过程,好好学,好好相处)
$ pssh -H user02@192.168.100.100 -P date //-H 后面跟主机名或者IP, -P 是在执行命令时,输出命令结果
$ pssh -H user02@192.168.100.100 -i date //-H 后面跟主机名或者IP,-i 也是显示命令结果。

$ pssh -i -O "StrictHostKeyChecking=no" -h
/etc/pssh/hosts "uptime" //-O
后面跟SSH的具体配置参数,“StrictHostKeyChecking=no”是sshd_config里面的一个配置选项,可以让远程主机自动接
受本地主机的hostkey,而不用每次都输入yes. -h
是跟一个服务器列表,/etc/pssh/hosts这个文件是我自己建的,在里面写上所有要远程的主机名或者IP。比如:
#more /etc/pssh/hosts
user02@192.168.100.100

$ pssh -i -h /etc/pssh/hosts "sudo "tar -zxvf
/root/hadoop-2.0.0.tar.gz ""
//这个命令用sudo了,解压hadoop-2.0.0.tar.gz这个压缩包。
类似的命令:

$ pssh -i -h /etc/pssh/hosts "sudo "yum install pssh -y""
$ pssh -i -h /etc/pssh/hosts "sudo "/etc/init.d/httpd restart""
一个pssh的综合英语实例:
$ pssh -i -x "-l user02" "-p 9529" -h /etc/pssh/hosts -o /etc/pssh/info "uptime;ls"
//上面的-x参数,分别调用了“-l" "-p",用户指定在远程主机上登录的用户名和SSH端口,而"-o" 参数将指定结果存放到/etc/pssh/info目录中。在这个实例的最后,指定了2个命令,它们之间用分号隔开!

上面就是pssh这个姑娘的大体上的性格!难么?相处熟了,一点都不难!

(四) 认识pscp 与 pslurp (pssh的姐姐和pssh 的哥哥)
pscp 的作用是将本地文件并行复制到远程多台主机上,而pslurp是把文件从远程多台主机复制到本地主机!在运维工作中,要进行文件批量传送时,pssh的姐姐和pssh的哥哥非常管用。

$ pscp -h /etc/pssh/hosts /etc/ssh/sshd_config /tmp
//这个命令把本地的sshd_config 复制到了远程主机的/tmp目录下,远程主机的名字在/etc/pssh/hosts里面记录着。

$ pscp -h /etc/pssh/hosts/ -r /etc/httpd/conf /tmp //-r的目的是递归复制,把目录中的文件全部复制过去。

$ pslurp -h /etc/pssh/hosts -L /home/user01/bendi
/home/user02/gmond.conf gmond1.conf //-L
是指定本地的主机路径,这句话的意思是把远程主机上的gmond.conf复制到本地的/home/user01/bendi目录下,并且改名为
gmond1.conf.
$ pslurp -h /etc/pssh/hosts -r -L
/home/user01/bendi /home/user02/gmond.conf gmond1.conf
//-r 是递归复制,作用和上面命令的作用基本相同,-r 和-L 顺序不能颠倒。

(五) 认识prsync 和pnuke (pssh的姑姑和pssh的叔叔)
pssh的姑姑---prsync,可以通过rsync协议将文件或者目录从本地主机远程同步到多个主机
pssh的叔叔---pnuke ,可以在远程主机上并行杀掉某一进程,相当于killall,它的叔叔比较狠!

$ prsync -h /etc/pssh/hosts -l user02 -a -r /etc/httpd
/tmp //-l 是指定远程主机上的用户,-r的递归复制,-a
可以保持复制过去的文件属性不变,比如创建时间,修改时间,读取权限等

$ prsync
-h /etc/pssh/hosts -l user02 -az -r /etc/httpd /tmp //-az
,-a是保持文件属性不变,-z是一个压缩传输参数。在低宽带环境下,或者对网络宽带有要求,传输文件压缩比大时可以使用。
但是在带宽充足或者传输的文件比较大,不推荐使用。

$ pnuke -h /etc/pssh/hosts httpd

这个命令将在远程主机上并行关闭httpd,类似与killall,后面跟的是httpd是服务名,只要通过killall命令能关闭的服务,都可以通过pnuke来批量完成

就是这些,说完了。
附:
-h 后面跟 远程主机列表文件,内容格式为[user@]host[:port]
-H 后面跟一个远程主机名或IP地址。
-l 后面跟远程主机上的用户名
-p 指定pssh最大并行线程数,比如:pssh -p 10
-o 指定输入的内容重定向到一个制定的文件中
-O 指定SSH参数 具体配置
-e 将执行错误冲定向到指定一个文件中
-t 设置命令执行的超时时间
-A 提示输入密码,并 把密码传递给SSH服务
-x 用于传递ssh命令的一些参数,每个参数用引号引起来,例如: pssh -x "-l user02" "-p 22"
-i 命令完成后显示标准输出和标准错误
-P 输出执行结果

写的有些急促,难免有些错误或不恰当的地方,请批评指正,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  自动化运维利器