多服务器批量命令执行指南:使用PSSH管理远程Linux系统
批量管理多台Linux服务器
当需要管理多台Linux服务器并在所有服务器上执行多个命令时,可以使用pssh(并行SSH)工具。这是一个强大的命令行实用程序,允许在多个主机上并行执行SSH命令,并支持从shell脚本向所有SSH进程发送输入。
创建命令执行脚本
首先,我们需要创建一个包含要在远程服务器上执行的命令的脚本。以下示例脚本将收集以下信息:
- 检查服务器运行时间
- 查看当前登录用户及其活动
- 按内存使用情况列出前5个进程
使用您喜欢的文本编辑器创建一个名为remote_commands.sh的脚本:
#!/bin/bash
# 脚本名称: remote_commands.sh
# 功能描述: 在多台远程服务器上执行多个命令
# 作者: 技术团队
echo
# 显示系统运行时间
echo "=== 系统运行时间 ==="
uptime
echo
# 显示当前登录用户及其活动
echo "=== 当前登录用户 ==="
who
echo
# 显示内存使用率最高的前5个进程
echo "=== 内存使用率最高的进程 ==="
ps -eo command,pid,ppid,mem,cpu --sort=-%mem | head -n 6
echo
exit 0
保存文件后,使其可执行:
chmod +x remote_commands.sh
配置目标服务器列表
接下来,创建一个包含目标服务器列表的文件。在targets.txt文件中添加服务器地址,格式为[用户名@]主机名[:端口]或仅提供IP地址。
建议使用SSH配置文件中定义的别名,这样可以更高效可靠地管理连接。在~/.ssh/config文件中可以为每个远程服务器指定配置选项(如主机名、标识文件、端口、用户名等)。
创建服务器列表文件:
vi targets.txt
添加服务器别名或IP地址:
web-server-1
db-server-2
app-server-3
在多台服务器上执行命令
现在,使用以下pssh命令在多个远程服务器上执行脚本:
pssh -h targets.txt -P -I < ./remote_commands.sh
命令参数说明:
-h- 指定主机文件路径-P- 实时显示输出结果-I- 从标准输入读取命令并发送到每个SSH进程
执行后,pssh将在所有指定的远程服务器上并行运行脚本中的命令,并返回执行结果。
进阶应用
除了基本的命令执行,pssh还支持更多高级功能:
- 使用
-t参数设置SSH超时时间 - 使用
-o和-e参数分别指定输出和错误日志目录 - 使用
-A参数提示输入密码(不推荐,建议使用SSH密钥认证) - 使用
-l参数指定远程用户名
通过合理组合这些参数,可以灵活应对各种服务器管理场景。
注意事项
- 确保所有目标服务器已配置SSH无密码登录
- 对于大量服务器,建议分批执行以避免网络拥塞
- 敏感操作前建议在测试环境验证脚本
- 考虑使用Ansible等更强大的自动化工具管理复杂场景