运维自动化脚本编写,批量操作多台服务器

如果你手上有三台以上服务器,重复登录执行相同命令会非常低效。
运维自动化脚本编写,批量操作多台服务器的核心思路是:先配置SSH免密登录,再用Shell循环或pssh工具批量执行命令,最后检查输出确认结果。
下面从零开始,带你完成整个流程。

准备工作:清单、免密与连通性检查

动手写脚本前,先确认三件事:服务器IP列表、统一登录用户、SSH端口。
建议新建一个文本文件存放IP,每行一个,例如 /tmp/hosts.txt

192.168.1.101
192.168.1.102
192.168.1.103

接着配置SSH免密登录,否则每次连接都要输密码。
在本地管理机执行:

ssh-keygen -t rsa -b 2048
ssh-copy-id root@192.168.1.101
ssh-copy-id root@192.168.1.102
ssh-copy-id root@192.168.1.103

验证免密是否生效:

ssh root@192.168.1.101 "hostname"

如果直接返回主机名且没提示输密码,说明配置成功。建议先用一台机器测试通过,再批量复制到其他机器,避免因网络或防火墙问题反复失败。

两种批量执行方式:Shell循环与pssh

最基础的方式是用 for 循环读取IP列表并逐台执行。
创建脚本 batch_run.sh

#!/bin/bash
for ip in $(cat /tmp/hosts.txt)
do
  echo "===== $ip ====="
  ssh root@$ip "uptime"
done

赋予执行权限并运行:

chmod +x batch_run.sh
./batch_run.sh

这种方式适合服务器数量少、命令执行时间短的场景。
如果服务器超过10台,串行执行会明显变慢,推荐使用 pssh 工具并行执行。
安装方式因系统而异,CentOS可尝试 yum install pssh,Ubuntu可尝试 apt install pssh,若仓库没有可改用 parallel-ssh 包。

使用pssh批量执行:

pssh -h /tmp/hosts.txt -l root -i "uptime"

参数说明:-h 指定主机文件,-l 指定登录用户,-i 表示显示每台机器的输出。并行执行能大幅缩短等待时间,但要注意命令本身是否适合并发操作,比如同时重启服务可能引发短暂不可用。

避坑指南:权限、超时与危险命令

批量操作最容易踩的坑集中在三方面。
第一,权限问题:如果登录用户不是root,执行需要提权的命令会失败,建议在脚本中使用 sudo 并确保该用户有免密sudo权限,或者直接用root账号操作。
第二,超时与卡顿:网络不通时SSH可能长时间挂起,可以在 ssh 命令中加入 -o ConnectTimeout=5 限制连接超时,例如:

ssh -o ConnectTimeout=5 root@$ip "df -h"

第三,危险命令无二次确认:像 rm -rfrebootshutdown 这类命令一旦批量执行后果严重。
建议先在脚本里加 echo 打印将要执行的内容,确认无误后再去掉 echo 真正执行。
另外,如果服务器SSH端口不是默认22,需要加 -p 端口号,主机文件里也可以写成 IP:端口 格式,但需要确认工具是否支持。

结果验证:如何确认批量操作真的生效

脚本跑完不代表任务完成,必须逐项核对。
对于 uptimedf -h 这类查询命令,直接看输出是否每台都有返回即可。
对于修改类操作,例如批量创建目录,建议在脚本末尾追加验证命令:

for ip in $(cat /tmp/hosts.txt)
do
  echo "===== $ip ====="
  ssh root@$ip "ls -ld /data/backup"
done

如果某台机器没有输出或报错,
单独登录该机器排查。建议把每次批量操作的输出重定向到日志文件,
例如 ./batch_run.sh > /tmp/batch_$(date +%F).log 2>&1
方便事后复查。

常见疑问

脚本执行时提示“Host key verification failed”怎么办?
这是首次连接新主机时SSH询问是否信任指纹导致的。可以临时使用 -o StrictHostKeyChecking=no 跳过检查,但生产环境建议先手动连接一次确认指纹。

主机文件里能不能写注释?
标准pssh主机文件不支持行内注释,Shell循环读取时如果遇到空行或 # 开头的行会报错。建议保持主机文件每行只有IP或IP:端口,不要混入注释。

批量执行时部分机器成功、部分失败,如何快速定位?
优先看日志中失败机器返回的错误信息。常见原因是网络不通、认证失败、命令不存在。可以先用 pingssh -o ConnectTimeout=5 单独测试失败机器,确认基础连通性后再重新执行。

能不能用Ansible替代脚本?
可以。Ansible适合更复杂的批量配置管理,但学习成本高于Shell脚本。如果只是偶尔执行几条命令,Shell加pssh足够;如果需要频繁下发配置、管理文件,建议后续学习Ansible。

掌握以上步骤后,你已经能用运维自动化脚本批量操作多台服务器。
建议先在小规模环境验证脚本逻辑,再逐步扩大范围,每次操作保留日志,遇到异常优先检查网络、权限和命令兼容性。

分享到:
上一篇
Zabbix运维监控部署,服务器异常自动告警
下一篇
Ansible批量管理服务器,批量推送网站配置
1
系统公告

泽御云中秋国庆双节活动上线:新购8折,拼团3.99元起

尊敬的用户:
泽御云“月满中秋·礼贺国庆”双节活动现已开启,活动时间为2026年9月23日至10月10日。 活动期间可享以下福利:
1. 常规云服务器新购使用优惠码“泽御中秋国庆同乐”,符合条件的订单享8折优惠。
2. 香港精品云服务器5人拼团低至3.99元,部分4核4G套餐3人拼团年付388元,续费同价。
3. 新用户购买年付云服务器,符合活动规则可赠送2个月使用时长。
4. 老用户续费季度赠15天,续费年度赠2个月;活动期间升级配置免收配置迁移手续费。
5. 推荐好友成功下单,符合条件的推荐人可获赠7天服务器使用时长。
6. 活动期间享宕机补偿标准翻倍、简单网站迁移协助及技术工单优先处理权益。
温馨提示:优惠码不适用于拼团套餐、活动轻量产品、年付订单及续费订单;拼团套餐为独立特价活动,不与赠时类福利叠加。赠送时长不可折现、退款或跨账户转移,具体规则以活动页面说明为准。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意