一、简介
pssh全称是parallel-ssh,是一个Python编写的可以并发在多台服务器上批量执行命令的工具,
它支持文件并行复制、远程并行执行命令、杀掉远程主机上的进程等。
前提:使用pssh工具包,必须保证本地主机和管理的远程主机之间的单向信任,
也就是要在本地主机和所有远程服务器上配置密钥认证访问。
项目地址:https://code.google.com/p/parallel-ssh/
pssh 包安装5个实用程序:parallel-ssh、parallel-scp、parallel-rsync、parallel-slurp、parallel-nuke 每个实用程序都并行地操作多个主机。
-
parallel-ssh 在多个主机上并行地运行命令。
-
parallel-scp 把文件并行地复制到多个主机上。(全量拷贝)
-
parallel-rsync 通过 rsync 协议把文件高效地并行复制到多个主机上。(增量拷贝)
-
parallel-slurp 把文件并行地从多个远程主机复制到中心主机上。
-
parallel-nuke 并行地在多个远程主机上杀死进程。
二、安装
yum -y install pssh
设置别名:
alias pscp=pscp.pssh
三、pssh
1、参数
pssh --help
可以查看命令参数选项:
[cuadmin@cdh68 ~]$ pssh --help
Usage: pssh [OPTIONS] command [...]
Options:
--version show program's version number and exit
--help show this help message and exit
-h HOST_FILE, --hosts=HOST_FILE
hosts file (each line "[user@]host[:port]")
-H HOST_STRING, --host=HOST_STRING
additional host entries ("[user@]host[:port]")
-l USER, --user=USER username (OPTIONAL)
-p PAR, --par=PAR max number of parallel threads (OPTIONAL)
-o OUTDIR, --outdir=OUTDIR
output directory for stdout files (OPTIONAL)
-e ERRDIR, --errdir=ERRDIR
output directory for stderr files (OPTIONAL)
-t TIMEOUT, --timeout=TIMEOUT
timeout (secs) (0 = no timeout) per host (OPTIONAL)
-O OPTION, --option=OPTION
SSH option (OPTIONAL)
-v, --verbose turn on warning and diagnostic messages (OPTIONAL)
-A, --askpass Ask for a password (OPTIONAL)
-x ARGS, --extra-args=ARGS
Extra command-line arguments, with processing for
spaces, quotes, and backslashes
-X ARG, --extra-arg=ARG
Extra command-line argument
-i, --inline inline aggregated output and error for each server
--inline-stdout inline standard output for each server
-I, --send-input read from standard input and send as input to ssh
-P, --print print output as we get it
Example: pssh -h hosts.txt -l irb2 -o /tmp/foo uptime
中文翻译:
-l 远程机器的用户名
-p 一次最大允许多少连接
-o 输出内容重定向到一个文件
-e 执行错误重定向到一个文件
-t 设置命令执行的超时时间
-A 提示输入密码并且把密码传递给ssh(注意这个参数添加后只是提示作用,随便输入或者不输入直接回车都可以,可以结合sshpass -p password使用)
-O 设置ssh参数的具体配置,参照ssh_config配置文件
-x 传递多个SSH 命令,多个命令用空格分开,用引号括起来
-X 同-x 但是一次只能传递一个命令
-i 显示标准输出和标准错误在每台host执行完毕后
-I 读取每个输入命令,并传递给ssh进程 允许命令脚本传送到标准输入
2、使用
在使用工具前,确保主机间做了密钥认证,否则无法实现自动化,当然我们可以使用sshpass(yum install sshpass)配合pssh -A参数实现自动输入密码,但这要保证多台主机的密码相同,同时还要注意如果known_hosts没有信任远程主机,那么命令执行会失败,可以加上-O StrictHostKeyChecking=no参数解决,ssh能用的选项pssh也能用
# 集群刚装好系统处于原始状态,可以使用下面命令来生成其他机器的ssh秘钥并将各机器的rsa公钥添加到本机
sshpass -p password pssh -I -A -O StrictHostKeyChecking=no -h ip.txt -l cuadmin -i "ssh-ketgen" # 然后本机回车n次帮助各机器生成ssh秘钥,password为其它机器的统一密码
sshpass -p password pssh -A -O StrictHostKeyChecking=no -h ip.txt -l cuadmin -i "ssh-copy-id localhost-ip" # localhost-ip改成你本机的ip
ip.txt
10.172.54.68
10.172.54.69
10.172.54.70
批量执行命令:
[cuadmin@cdh68 ~]$ pssh -h ip.txt uptime
[1] 17:09:09 [SUCCESS] 10.172.54.68
[2] 17:09:09 [SUCCESS] 10.172.54.69
[3] 17:09:09 [SUCCESS] 10.172.54.70
[cuadmin@cdh68 ~]$ pssh -h ip.txt -P uptime
10.172.54.68: 17:10:02 up 549 days, 23:50, 4 users, load average: 0.17, 0.12, 0.19
[1] 17:10:02 [SUCCESS] 10.172.54.68
10.172.54.70: 17:10:02 up 549 days, 23:43, 2 users, load average: 0.11, 0.17, 0.22
[2] 17:10:02 [SUCCESS] 10.172.54.70
10.172.54.69: 17:10:02 up 549 days, 23:47, 2 users, load average: 0.00, 0.04, 0.05
[3] 17:10:02 [SUCCESS] 10.172.54.69
保存每台服务器运行的结果:
20201013 ambariashell cling-master CTR_Mobile dfs download hosts.txt ip.txt password.sh password.txt software tencent2019Rank1st test.sh yarn
[cuadmin@cdh68 ~]$ mkdir /tmp/pssh
[cuadmin@cdh68 ~]$ pssh -h ip.txt -P -o /tmp/pssh/ uptime
10.172.54.68: 17:14:41 up 549 days, 23:54, 4 users, load average: 0.07, 0.09, 0.16
[1] 17:14:41 [SUCCESS] 10.172.54.68
10.172.54.69: 17:14:41 up 549 days, 23:52, 2 users, load average: 0.28, 0.12, 0.08
[2] 17:14:41 [SUCCESS] 10.172.54.69
10.172.54.70: 17:14:41 up 549 days, 23:48, 2 users, load average: 0.10, 0.13, 0.20
[3] 17:14:41 [SUCCESS] 10.172.54.70
[cuadmin@cdh68 ~]$ ll /tmp/pssh/
total 12
-rw-r----- 1 cuadmin cuadmin 72 Nov 5 17:14 10.172.54.68
-rw-r----- 1 cuadmin cuadmin 72 Nov 5 17:14 10.172.54.69
-rw-r----- 1 cuadmin cuadmin 72 Nov 5 17:14 10.172.54.70
[cuadmin@cdh68 ~]$ cat /tmp/pssh/*
17:14:41 up 549 days, 23:54, 4 users, load average: 0.07, 0.09, 0.16
17:14:41 up 549 days, 23:52, 2 users, load average: 0.28, 0.12, 0.08
17:14:41 up 549 days, 23:48, 2 users, load average: 0.10, 0.13, 0.20
四、pscp
pscp
用来将文件并行的复制到多个主机上。
pscp
和pssh
的很多参数都是一样的,就不在多说了,举一个简单的例子来说明一下pscp
的简单实用。
基本使用方法:
pscp -h ip文件 本地文件 远程目录
例子:将本机的/tmp/i.txt
文件复制到ip.txt
列出的主机上的/tmp
目录
[cuadmin@cdh68 ~]$ cat /tmp/i.txt
hello pssh!
[cuadmin@cdh68 ~]$ pscp -h ip.txt /tmp/i.txt /tmp/
[1] 17:24:00 [SUCCESS] 10.172.54.70
[2] 17:24:00 [SUCCESS] 10.172.54.68
[3] 17:24:00 [SUCCESS] 10.172.54.69
#传目录
[cuadmin@cdh68 ~]$ pscp -r -h ip.txt test/ /tmp/dir1/
特别参数说明:
-
-r:用于递归的复制目录
传文件,不支持远程新建目录
五、pslurp
pslurp
把文件并行地从多个远程主机复制到中心主机上,从远程拉取文件到本地,在本地自动创建目录名为远程主机ip的目录,将拉取的文件放在对应主机IP目录下
基本用法:
pslurp -h ip.txt -L <本地目录> <远程目录/文件> <本地重命名>
例子:将ip.txt
列出的主机上的/tmp/i.txt
文件复制到本机的/data1/tmp/ip/i.txt
[cuadmin@cdh68 ~]$ pslurp -h ip.txt -l cuadmin -L /data1/tmp /tmp/i.txt i.txt
[1] 17:34:33 [SUCCESS] 10.172.54.70
[2] 17:34:33 [SUCCESS] 10.172.54.68
[3] 17:34:33 [SUCCESS] 10.172.54.69
[cuadmin@cdh68 ~]$ ll /data1/tmp/
total 12
drwxr-x--- 2 cuadmin cuadmin 4096 Nov 5 17:34 10.172.54.68
drwxr-x--- 2 cuadmin cuadmin 4096 Nov 5 17:34 10.172.54.69
drwxr-x--- 2 cuadmin cuadmin 4096 Nov 5 17:34 10.172.54.70
[cuadmin@cdh68 ~]$ ll /data1/tmp/10.172.54.68
total 4
-rw-r----- 1 cuadmin cuadmin 12 Nov 5 17:34 i.txt
[cuadmin@cdh68 ~]$ cat /data1/tmp/10.172.54.68/i.txt
hello pssh!
#拉取目录
[cuadmin@cdh68 ~]$ pslurp -r -h ip.txt -L /root/ /root/test temp
特别参数说明:
-L 指定本地存放文件的目录
虽然帮助文档中说 -L
参数是可选的,但是经过我试验 -L
参数是必须的,要不然会报错。
增加 -L
参数后,会在 -L
指定的本地目录下创建[用户@]主机IP[:端口]
目录,对应的目录下用于存放从改主机复制过来的文件。
六、pnuke
pnuke
并行地在多个远程主机上杀死进程。
pnuke
的参数与pssh
一样,只是最后的字符串为要结束的进程名称
例子:将ip.txt
列出的主机上的httpd
进程杀死
[cuadmin@cdh68 ~]$ pnuke -h ip.txt -l cuadmin httpd
[1] 09:55:28 [SUCCESS] 10.172.54.68
[2] 09:55:28 [SUCCESS] 10.172.54.69
[3] 09:55:28 [SUCCESS] 10.172.54.70
7、prsync
并行传输文件到远端
#传文件,支持远程新建目录,即目录不存在则新建
prsync -h ip.txt test.py /tmp/dir2/
#传目录
prsync -r -h ip.txt test/ /tmp/dir3/
本文分享自微信公众号 - 大数据AI(songxt1990)。
如有侵权,请联系 [email protected] 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。