PSSH是一个批量操作服务器的软件,当运维人员负责一个服务器集群的时候,面对二三十台服务器的时候,先把这些服务器的ip们都写进一个文档里,然后使用pssh 搭配这个文档,就能一口气的同时操作这二三十台机器,省事又省力,真是居家旅行节省体力的运维必需品。
安装
pssh是在python的基础上编写出来的脚本命令,所以python是操作pssh的基础,现在的linux和mac os都自带python,虽然自带的是python的版本是2.6.6但是也已经够用了。
#tar -zxvf pssh-2.3.1.tar.gz
#cd pssh-2.3.1
#python setup.py install
安装成功的话,就有这样的提示:
<a href="http://s3.51cto.com/wyfs02/M02/7E/FD/wKioL1cPOimj4ZyGAABD4R0Xe64378.png" target="_blank"></a>
可以看见/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地址。
<a href="http://s3.51cto.com/wyfs02/M01/7F/01/wKioL1cPmJaABbXcAACIYj3LJjY434.png" target="_blank"></a>
由上图可以看到ip.txt这个文档的内容而且,这两台机器之间是可以互相ping通的。
下面也是几个常见的用法举例:
1
<code>#pssh -i -A -h ip.txt uptime</code>
这个命令就是向ip.txt文档里的ip发送“uptime”(查看运行时间)的意思。其中-A就是要提供对方服务器的密码。输入后的结果如图:
<a href="http://s4.51cto.com/wyfs02/M01/7F/04/wKiom1cPmU6TMZ_8AABml-HHGUc751.png" target="_blank"></a>
<code>#pssh -i -A -h ip.txt ls</code>
这个命令是“向ip.txt里的文档的所有ip地址发送ls命令”,这个命令如果不加绝对路径就是作用于目标服务器当前目录下的。
<code>#pscp -A -h ip.txt aaa.txt /data/mysql</code>
这个命令意思是“把当前目录下的aaa.txt 文件向ip.txt里的所有地址的/data/mysql文件夹里一一发送"。
<code>#pslurp -A -h ip.txt /A/B/old.txt /new.log</code>
这个命令的意思是“ 把ip.txt里所有的目标机器里的/A/B/文件夹的old.txt文件拉到pssh服务器的当前服务器里,pssh会根据ip.txt的不同ip建立不同的子文件夹,同时把old.txt改名叫new.log。
<code>#prsync -h ip.txt -l dongwm -a -r /etc/sysconfig /tmp/etc</code>
这个命令的意思是“将本地的/etc/sysconfig目录递归同步到目标服务器的 /tmp/etc目录下,并保持原来的时间戳,使用的用户名是dongwm“。
<code>#pnuke -h ip.txt apache</code>
这个命令的意思是"远程kill掉目标名单里所有的apache的进程"。
参考文章:http://www.ibm.com/developerworks/cn/aix/library/au-spunix_remoteserver/index.html
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1763781