1,本地服务器已做了公私钥 ssh-gen
2, 安装python
如安装setuptools包不成功:
1
| yum install python-setuptools.noarch
|
3, 下载最新版本
1 2 3 4
| wget http://www.theether.org/pssh/pssh-1.4.3.tar.gz tar zxvf pssh-1.4.3.tar.gz cd pssh-1.4.3 python setup.py install
|
4,在 other.txt 输入已经copy好公钥的服务器名
1 2 3
| $ cat other.txt 192.168.2.241 192.168.2.148:22 (端口不写默认为22)
|
5,安装成功直接执行命令
1 2 3 4 5
| Parallel ssh (pssh) 批量登陆操作某一命令或脚本 Parallel scp (pscp) 批量copy Parallel rsync (prsync) 批量同步 Parallel nuke (pnuke) 批量killall 某一进程 Parallel slurp (pslurp) 批量远程copy文件至当前服务器
|
例:
pscp:
将文件lighttpd-1.4.30.tar.gz 复制到远程各服务器的/usr/local目录下.
1 2 3
| pscp -h other.txt -l root /opt/lighttpd-1.4.30.tar.gz /usr/local/ [1] 11:26:43 [SUCCESS] 192.168.2.241 22 [2] 11:26:43 [SUCCESS] 192.168.2.148 22
|
例:
pssh:
在各服务器上执行 hostname查看 将结果输入到 success 目录下.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| pssh -h other.txt -l root -o success -e error hostname [1] 11:21:37 [SUCCESS] 192.168.2.241 22 [2] 11:21:37 [SUCCESS] 192.168.2.148 22 opt]# pssh -h other.txt -l root -i hostname [1] 11:39:27 [SUCCESS] 192.168.2.241 22 testrhelclone.com [2] 11:39:27 [SUCCESS] 192.168.2.148 22 testcobb.com pssh -h other.txt -l root -i sh /opt/aa.sh #直接执行远程脚本 [1] 14:44:16 [SUCCESS] 192.168.2.241 22 pssh this is ok 241 14:42:33 [2] 14:44:16 [SUCCESS] 192.168.2.148 22 pssh this is ok 148 14:42:33
|
例:
prsync:
将本地的other.txt 同步到远程的/opt/other1.txt.
1 2 3
| prsync -r -h other.txt -l root other.txt /opt/other1.txt [1] 11:51:55 [SUCCESS] 192.168.2.148 22 [2] 11:51:55 [SUCCESS] 192.168.2.241 22
|
将success压缩传输:
1 2 3
| prsync -r -az -h other.txt -v -l root success /opt/ [1] 13:40:49 [SUCCESS] 192.168.2.241 22 [2] 13:40:49 [SUCCESS] 192.168.2.148 22
|
例:
pslurp:
pslurp 与pscp方向相反!
1 2 3
| Usage: pslurp [OPTIONS] -h hosts.txt -o outdir remote local Example: pslurp -h hosts.txt -L /tmp/outdir -l irb2 /home/irb2/foo.txt foo.txt
|
将远程服务器的各个/opt/success目录递归 拷贝到本地的/opt/test/目录下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| pslurp -r -h other.txt -L /opt/test/ /opt/success remote [1] 14:19:45 [SUCCESS] 192.168.2.241 22 [2] 14:19:45 [SUCCESS] 192.168.2.148 22 [root@testrhel opt]# cd test/ [root@testrhel test]# ls 192.168.2.148 192.168.2.241 [root@testrhel test]# tree * 192.168.2.148 `-- remote |-- 192.168.2.148 |-- 192.168.2.241 |-- aa.txt `-- daf.d 192.168.2.241 `-- remote |-- 192.168.2.148 |-- 192.168.2.241 |-- aa.txt `-- inotify.sh
|
例:
pnuke:
将远程服务器中的所有以root启动的sendmail 服务关闭 (只要ps aux到 sendmail 就强行关闭 如同 killall命令).
1 2 3
| pnuke -h /opt/other.txt -l root sendmail [1] 14:29:58 [SUCCESS] 192.168.2.148 22 [2] 14:29:58 [SUCCESS] 192.168.2.241 22
|
其它:
1,如果过程中需要交互,如询问yes/no的时候,可以使用以下方式来解决.
1
| pssh -i -h /opt/other.txt "echo y | sudo yum remove xxxx"
|
这样的话,yum询问是否安全的时候,就可以自动确认了.
2,添加环境变量,让命令更简洁.
1 2 3 4 5 6 7 8 9 10
| export PSSH_HOSTS="/opt/other.txt" pssh -i hostname [1] 15:04:06 [SUCCESS] 192.168.2.148 22 testcobb.com [2] 15:04:06 [SUCCESS] 192.168.2.241 22 pssh -h ip1.txt -i hostname 也可另指目录文件 [1] 15:05:35 [SUCCESS] 192.168.2.148 22 testcobb.com [2] 15:05:35 [SUCCESS] 192.168.2.241 22 testrhelclone.com
|
官网给出的一些环境变量名,可相应添加!
1 2 3 4 5 6
| # export PSSH_HOSTS="/x/bnc/ips.txt" # export PSSH_USER="irb2" # export PSSH_PAR="32" # export PSSH_OUTDIR="/tmp/bar" # export PSSH_VERBOSE="0" # export PSSH_OPTIONS="UserKnownHostsFile /tmp/known_hosts"
|