PSSH是一个批量操作服务器的软件,当运维人员负责一个服务器集群的时候,面对二三十台服务器的时候,先把这些服务器的ip们都写进一个文档里,然后使用pssh 搭配这个文档,就能一口气的同时操作这二三十台机器,省事又省力,真是居家旅行节省体力的运维必需品。


安装

pssh是在python的基础上编写出来的脚本命令,所以python是操作pssh的基础,现在的linux和mac os都自带python,虽然自带的是python的版本是2.6.6但是也已经够用了。

#wget ftp://ftp.freebsd.ch/gentoo/distfiles/pssh-2.3.1.tar.gz,下载pssh-2.3.1。

#tar -zxvf pssh-2.3.1.tar.gz

#cd pssh-2.3.1

#python setup.py install

安装成功的话,就有这样的提示:

wKioL1cPOimj4ZyGAABD4R0Xe64378.png

可以看见/usr/bin里就多了很多的可执行命令,比如说pssh,可以#pssh --help一下,就知道其具体的用法了。


各命令解析和用法

pssh   多主机并行运行命令

pscp   传输文件到多个hosts,他的特性和scp差不多

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

pnuke    kill远程机器的进程

pslurp   从远程主机考本文件到本地

prsync   使用rsync协议从本地计算机同步到远程主机,这个协议很重要,比如说购物网站,某个物品只有一个,一旦这个物品被买走了,数据库就发生了变化,同时使用prsync命令把数据与其他主机进行同步,其他的服务器也会更新"此物品已经售罄"。


pssh的参数:

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

-l 远程机器的用户名

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

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

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

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

-A 提示输入密码并且把密码传递给ssh

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

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

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

-i 显示succeed或者failed

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

-P 打印输出



具体操作

pssh服务器的ip地址是203.90.146.243,而它所管理的服务器们的ip可以写进一个文档里,由于本实验室比较拮据,只有一个linux服务器,而这台服务器的ip地址是203.90.146.239。于是我们可以先写一个叫ip.txt这个文档,里面的内容就是所管理服务器的ip地址。

wKioL1cPmJaABbXcAACIYj3LJjY434.png

由上图可以看到ip.txt这个文档的内容而且,这两台机器之间是可以互相ping通的。


下面也是几个常见的用法举例:

#pssh -i -A -h ip.txt uptime

这个命令就是向ip.txt文档里的ip发送“uptime”(查看运行时间)的意思。其中-A就是要提供对方服务器的密码。输入后的结果如图:

wKiom1cPmU6TMZ_8AABml-HHGUc751.png

#pssh -i -A -h ip.txt ls

这个命令是“向ip.txt里的文档的所有ip地址发送ls命令”,这个命令如果不加绝对路径就是作用于目标服务器当前目录下的。

#pscp -A -h ip.txt  aaa.txt /data/mysql

这个命令意思是“把当前目录下的aaa.txt 文件向ip.txt里的所有地址的/data/mysql文件夹里一一发送"。

#pslurp -A -h ip.txt /A/B/old.txt /new.log

这个命令的意思是“ 把ip.txt里所有的目标机器里的/A/B/文件夹的old.txt文件拉到pssh服务器的当前服务器里,pssh会根据ip.txt的不同ip建立不同的子文件夹,同时把old.txt改名叫new.log。

#prsync -h ip.txt -l dongwm -a -r /etc/sysconfig /tmp/etc

这个命令的意思是“将本地的/etc/sysconfig目录递归同步到目标服务器的 /tmp/etc目录下,并保持原来的时间戳,使用的用户名是dongwm“。

#pnuke -h ip.txt   apache

这个命令的意思是"远程kill掉目标名单里所有的apache的进程"。





参考文章:http://www.ibm.com/developerworks/cn/aix/library/au-spunix_remoteserver/index.html