pssh(Parallel SSH)是Linux环境下高效的批量命令执行工具,基于Python开发,能通过一条命令在数十甚至数百台服务器上并行执行shell命令或传输文件,尤其适合运维工程师快速巡检、部署和排查问题。
pssh Linux使用教程:安装与基础配置
对于刚接触pssh的用户,首先需要掌握安装方法,由于pssh已进入主流发行版仓库,安装步骤极其简单。
使用系统包管理器安装
- Debian/Ubuntu:执行
sudo apt update && sudo apt install pssh - RHEL/CentOS 7/8:启用EPEL源后运行
sudo yum install pssh或sudo dnf install pssh - Fedora:直接
sudo dnf install pssh - macOS:通过Homebrew安装
brew install pssh
安装完成后,输入 pssh --version 验证,若显示版本号(如0.9.0),即表示成功,pssh本身基于Python,因此系统需预装Python 2.7+或Python 3.x,这与绝大多数主流Linux发行版一致。
从源码获取最新版本
当需要体验最新特性时,可以从GitHub克隆仓库编译,以CentOS为例:
git clone https://github.com/lilydjwg/pssh.git
cd pssh
python setup.py install
这种方式不依赖包管理器,但注意后续升级需手动拉取源码,对于一般用户,推荐使用包管理器安装,便捷且稳定。
配套工具清单
安装pssh后,会同步获得以下四种实用命令:
pssh:并行执行远程命令pscp:并行复制文件到多台主机prsync:并行同步目录(基于rsync)pnuke:并行终止远程主机上的进程
这些工具共享相同的参数体系,一次学习处处可用。
pssh用法详解:批量命令与文件传输
pssh的核心能力是对指定主机列表执行命令,整个过程清晰高效,下面从最简场景开始讲解。
准备主机列表
创建纯文本文件 hosts.txt,每行一个目标主机:
0.0.11
10.0.0.12
10.0.0.13
也可以用主机名代替,前提是DNS或/etc/hosts已解析。熟练后还可以直接在命令行传递主机列表,使用 -H 参数:
pssh -H "10.0.0.11 10.0.0.12 10.0.0.13" -l root -i "uptime"
常用参数组合
pssh提供丰富的选项,下表列出高频参数:
| 参数 | 作用 | 举例 |
|---|---|---|
-h |
指定主机列表文件 | -h hosts.txt |
-H |
直接列出主机 | -H "h1 h2" |
-l |
指定远程用户 | -l admin |
-i |
在本地显示标准输出和错误 | 最常用,实时看结果 |
-P |
实时输出每台主机的结果 | 相当于增强版-i |
-o |
输出目录,每个主机单独文件 | -o /tmp/pssh_out |
-e |
错误输出目录 | -e /tmp/pssh_err |
-p |
并行度(并发数,默认32) | -p 10 |
-A |
手动输入密码 | 交互式,不建议脚本用 |
-t |
超时时间(秒) | -t 0 禁用超时 |
典型的使用方法是:pssh -h hosts.txt -l root -i "命令",例如检查所有服务器内存使用情况:
pssh -h all_servers -l root -i "free -h"
输出会依次显示每台主机的主机名和结果,非常直观。
批量文件分发
pscp 命令可将本地文件复制到所有目标主机的相同路径:
pscp -h hosts.txt -l root /etc/hosts /tmp/hosts
prsync 则基于rsync算法,对于大目录或增量同步更高效:
prsync -h hosts.txt -l root -avz /data/config /data/config_backup
实际场景举例
- 批量安装软件包:
pssh -h hosts.txt -l root -i "yum install -y htop" - 重启服务:
pssh -h web_group -l root -i "systemctl restart nginx" - 查看日志尾部:
pssh -h all -l root -i "tail -5 /var/log/messages"
这些操作在日常运维中反复出现,使用pssh一行命令即可完成,相比传统ssh循环效率提升数十倍。
pssh和ansible对比:选型分析
很多运维人员在选择批量管理工具时,会在pssh与Ansible之间犹豫,实际上两者定位不同,不存在绝对的优劣。简单说:pssh适合临时命令执行,Ansible适合长期配置管理。
差异详解
- 设计哲学:pssh是“命令执行器”,专注于将同一个SSH命令并行推到多台机器;Ansible是“配置管理工具”,用YAML描述最终状态,自动达到状态。
- 学习成本:pssh半小时即可上手;Ansible需要理解playbook、inventory、模块、变量等概念,新手可能需要一周。
- 执行效率:pssh仅发起SSH连接,网络开销小;Ansible额外有解析playbook和facts收集,慢但功能全。
- 错误恢复:pssh简单返回退出码;Ansible提供幂等性、重试、回滚等机制。
场景建议
- 如果是快速巡检、分发配置、即时修复,用pssh节省时间。
- 如果是标准化部署、持续交付、合规审计,用Ansible更可靠。
- 实际很多工程师两者结合:日常问题用pssh,重大变更用Ansible。
pssh的价值在于轻量快速,不引入任何代理和依赖,因此也是业界排查问题的首选,例如网站响应慢,需要同时看10台web服务器的连接数和负载,pssh无疑是最快的方案。
批量管理最佳实践
为了充分发挥pssh的优势,需注意以下几点。
免密SSH登录
pssh必须依赖SSH认证,使用密码(-A)只能交互式输入,不适合自动化。标准做法是配置SSH密钥并分发公钥:
ssh-keygen -t rsa -b 4096
ssh-copy-id user@host
配合ssh-agent管理,后续执行pssh时无需再输入密码。
主机分组与安全
按角色建立主机列表文件,如 web.list、db.list、all.list,操作时指定对应的文件,避免误伤,同时尽量使用普通用户,再结合sudo权限执行特权命令,如:
pssh -h web.list -l ops -i "sudo systemctl restart httpd"
sudo可配置NOPASSWD,使流程更顺畅。
错误处理与日志
- 使用
-o和-e将输出与错误分类存储,便于事后审计。 - 设置
-t 30限制最大执行时间,防止某台机器挂起阻塞整体。 - 对于关键操作,先在小范围测试,再扩大到全量。
利用脚本实现多步骤
当命令超过三行时,建议将逻辑写入脚本,通过pscp推送到目标机,再用pssh执行脚本,例如部署应用时:
# 准备部署脚本 deploy.sh
pscp -h all.new -l ubuntu deploy.sh /tmp/
pssh -h all.new -l ubuntu -i "chmod +x /tmp/deploy.sh && /tmp/deploy.sh"
这样既保留了pssh的并行优势,又能处理复杂流程,pssh就是这样一款工具轻量、高效、易上手,掌握它后你将不再畏惧大规模服务器操作。
关于pssh的常见问题
pssh安装后执行提示命令未找到?
通常是因为Python脚本路径未加入环境变量,使用 python -m pssh 代替直接命令,或确认pssh安装路径(如/usr/local/bin)在PATH中,重新登录shell通常解决。
pssh与parallel-ssh、clusterssh有什么区别?
pssh与parallel-ssh是同一个软件的不同命名,功能完全相同,而clusterssh(cssh)是另一种思路,它会打开多个终端窗口,让你同时给多个窗口输入,pssh则是返回标准输出,更适合脚本集成,大多数场景下pssh更实用。
pssh在macOS下如何管理Linux服务器?
macOS可直接通过Homebrew安装pssh,由于macOS自带OpenSSH客户端,与Linux服务器通信无任何障碍,注意在macOS上执行pssh时,主机列表中的IP必须可从本机访问,且建议使用密钥认证。
首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/499882.html
