ansible 可批量修改服务器主机名和网络配置,需先配置ssh免密登录与python环境;用hostname模块设主机名,按系统差异选systemd-networkd或netplan等方案配网络,并通过备份、分步执行和逐台部署保障安全。

Ansible 可以高效、安全地批量修改大量服务器的主机名和网络配置,无需逐台登录,关键在于编写清晰的 playbook 并确保目标主机已正确配置 SSH 连接与 Python 环境。
准备前提:确保 Ansible 环境可用
在控制节点上安装 Ansible(如 Ubuntu):
- 运行 sudo apt update && sudo apt install ansible -y
- 确认目标主机已添加到 /etc/ansible/hosts(例如分组为 [servers]),且可通过 SSH 免密登录
- 目标主机需安装 Python(建议 Python 3.6+),可使用 ansible servers -m ping 测试连通性
批量修改主机名:使用 hostname 模块
Ansible 提供 hostname 模块直接设置主机名,支持永久生效(写入 /etc/hostname)并立即应用:
- 在 playbook 中指定新主机名,例如:name: "{{ inventory_hostname }}"(用清单中定义的主机名)或 name: "web01-{{ group_names[0] }}"
- 模块会自动处理不同发行版(如 systemd 的 hostnamectl 或传统 sysvinit 方式)
- 注意:修改后通常无需重启,但部分服务(如某些日志或认证组件)可能仍需手动 reload
批量配置网络:使用 systemd-networkd 或 network 模块(依系统而定)
网络配置方式因操作系统差异较大,需按实际环境选择:
- 对于使用 systemd-networkd 的系统(如较新 Debian/Ubuntu/CentOS Stream),用 copy 模块部署 /etc/systemd/network/*.network 文件,并执行 systemctl restart systemd-networkd
- 对于传统 NetworkManager 或 ifupdown(如 Ubuntu 20.04 默认),推荐用 template 模块生成 /etc/netplan/*.yaml(Ubuntu)或 /etc/network/interfaces(Debian),再运行 netplan apply 或 ifdown/ifup
- 务必在 playbook 中加入 ignore_errors: no 和 check_mode: no,避免因网络中断导致任务挂起;建议先用 --limit 测试单台
安全与回滚:避免“改完就断连”
网络配置错误极易导致失联,必须提前规划容错机制:
- 所有网络变更前,用 shell 模块备份原配置,例如:cp /etc/netplan/01-netcfg.yaml /etc/netplan/01-netcfg.yaml.bak
- 设置超时和重试逻辑,如 retries: 3 + delay: 10,给服务重启留出时间
- 将主机名与网络配置拆分为两个独立 play,先改主机名(不影响连接),再改网络(高风险步骤单独验证)
- 生产环境建议配合 serial: 1 逐台执行,避免全网中断











