Linux Shell 批量管理服务器方法

6次阅读

Linux Shell 批量管理服务器方法

批量管理 linux 服务器,核心是把重复操作自动化,避免逐台登录执行命令。关键不在于工具多高级,而在于是否稳定、可追溯、易维护。

ssh 密钥 + 循环脚本最轻量

无需额外安装工具,适合 5–20 台常规服务器。前提是已配置好免密登录(必须先完成 ssh-copy-id 或手动部署公钥)。

  • 写一个包含所有目标 IP 或主机名的列表文件,比如 servers.txt,每行一个地址
  • for 循环配合 ssh 执行命令,例如同步时间:
    while read host; do ssh “$host” “sudo systemctl restart systemd-timesyncd”; done
  • timeout 10 防卡死,加 || echo “$host failed” 记录失败节点

ansible 是中小规模首选方案

无客户端、YAML 描述清晰、幂等性强,适合需要版本控制和协作的场景。控制机只需 Python 和 ansible 命令行工具。

  • 定义 inventory 文件(如 hosts),分组管理:
    [web]
    192.168.1.10
    192.168.1.11
  • 一条命令批量执行:
    ansible web -m shell -a “uptime”
  • 用 playbook 管理复杂流程,比如更新软件包+重启服务,支持变量、条件、错误处理

简单任务优先考虑 pssh(Parallel SSH)

比纯 shell 循环强在并发执行、结果聚合,比 Ansible 轻量,适合运维临时批量操作。

  • 安装后用 pssh -h hosts.txt -l user -i “df -h” 并发查看磁盘空间
  • -i 显示每台输出,-o ./output/ 把结果按主机存为文件,方便后续 grep 或统计
  • 失败时自动跳过,用 -x “-o ConnectTimeout=5” 控制连接超时

安全与可维护性不能妥协

批量操作威力大,出错影响广,必须前置约束和事后验证。

  • 所有脚本和 playbook 必须用普通用户执行,提权操作显式写 become: yessudo,禁用 root 直连
  • 敏感操作(如 rm、reboot)加 –limit 或先用 –check 模拟运行
  • 每次批量动作记日志:ansible … | tee run-$(date +%F).log,保留时间戳和返回码
text=ZqhQzanResources