对集群的服务器批量运行脚本,但不想麻烦使用 ansible 写 playbook 时,可以用pssh。
pssh 是常用的批量执行工具,直接通过 SSH 在多个服务器上并行执行命令。
使用方法
1. 先准备 NC IP 列表文件
shell
cat /tmp/iplist
10.0.0.1
10.0.0.2
10.0.0.3
2. 上传脚本(scp/pscp)
shell
for i in `cat /tmp/iplist`;do scp /tmp/xxx.py $i:/tmp/;done
# 或者用 pscp
# pscp [选项] 本地路径 远程路径
pscp -h /tmp/iplist /tmp/xxx.py /tmp/
pscp 常用参数如下:
| 参数 | 说明 |
|---|---|
| -h 文件 | 主机清单文件 |
| -H "host1,host2" | 直接在命令行指定主机,逗号分隔 |
| -l 用户 | 登录用户 |
| -p 数量 | 并行数,默认 32 |
| -t 秒 | 连接超时时间 |
| -o 目录 | 标准输出保存目录 |
| -e 目录 | 错误输出保存目录 |
| -x "参数" | 额外传给 ssh 的参数 |
| -O "选项=值" | 传给 ssh 的配置选项 |
| -r | 递归复制目录 |
| -v | 显示详细过程 |
| -q | 静默模式 |
举例:
shell
# 把本地文件并行复制到多台主机
pscp -h hosts.txt -l admin -p 50 /local/config.txt /remote/config.txt
# 递归上传目录,并指定私钥
pscp -h hosts.txt -r -x "-i ~/.ssh/id_rsa" /local/scripts /opt/scripts
# 忽略主机密钥检查
pscp -h hosts.txt -O "StrictHostKeyChecking=no" /local/file /remote/file
3. 批量执行脚本(脚本内容用引号包裹)
shell
pssh -ih /tmp/iplist "python /tmp/xxx.py"
# 如果不希望前台输出而是保存到文件中
pssh -ih /tmp/iplist "python /tmp/xxx.py" > result.txt
pssh 参数解释:
| 参数 | 说明 |
|---|---|
| -h 文件 | 主机清单文件 |
| -H "host1,host2" | 命令行直接指定主机 |
| -l 用户 | 登录用户 |
| -p 数量 | 并行数,默认 32 |
| -t 秒 | 连接超时 |
| -o 目录 | 标准输出保存目录 |
| -e 目录 | 错误输出保存目录 |
| -i | 直接在终端显示每台主机的输出 |
| -x "参数" | 额外传给 ssh 的参数 |
| -O "选项=值" | 传给 ssh 的配置选项 |
| -I | 从标准输入读取内容并传给远程命令 |
| -v | 显示详细过程 |