Linux中Ansible批量初始化新购服务器,通过Playbook统一配置SSH免密、主机名、时区、YUM源、SELinux、防火墙和时间同步等;需先在控制机安装Ansible、配置免密通道、定义inventory清单,再编写并执行init-servers.yml完成自动化部署。

Linux 中使用 Ansible 批量初始化新购服务器,核心是把重复性系统配置动作标准化、自动化。不需要每台机器手动敲命令,也不用写复杂脚本,靠一套 Playbook 就能统一完成 SSH 免密、主机名、时区、YUM 源、SELinux、防火墙、时间同步等基础设置。
一、前期准备:控制机 + 免密通道
在一台作为控制节点的 Linux 机器上安装 Ansible(推荐 2.10+):
- yum install -y epel-release ansible(CentOS/RHEL)
- 或 apt install -y ansible(Ubuntu/Debian)
- 生成 SSH 密钥:ssh-keygen -t rsa -b 4096,一路回车即可
- 将公钥批量复制到所有新服务器:ssh-copy-id root@192.168.10.101、ssh-copy-id root@192.168.10.102……(逐台执行,或用 shell 循环)
- 验证是否通:ansible all -m ping -i ./inventory,返回 SUCCESS 表示连通正常
二、定义目标主机:写好 inventory 清单
新建文件 ./inventory,内容示例如下:
[new_servers] 192.168.10.101 192.168.10.102 192.168.10.103 [new_servers:vars] ansible_user=root ansible_ssh_common_args='-o StrictHostKeyChecking=no'
注意:ansible_ssh_common_args 关闭首次连接的 host key 提示,避免交互中断自动化流程;若用普通用户,需确保有 sudo 权限并配置 ansible_become=yes。
三、编写初始化 Playbook:一个文件搞定基础配置
新建 init-servers.yml,包含以下关键任务:
- 设置主机名:用 hostname 模块,配合变量映射(如按 IP 分配 node01/node02)
- 配置时区与时间同步:用 timezone 模块设 Asia/Shanghai,再用 systemd 模块启用 chronyd 或 systemd-timesyncd
- 替换 YUM/DNF 镜像源:用 copy 模块推送本地 prepared 的 repo 文件(如 aliyun 或清华源),或用 lineinfile 替换 baseurl
- 关闭 SELinux:用 selinux 模块设 state=disabled,并修改 /etc/selinux/config
- 配置 firewalld 或 iptables:如开放 22、80、443 端口,或直接 systemd 停用 firewalld(按安全策略决定)
- 加固 SSH 配置:用 lineinfile 修改 /etc/ssh/sshd_config,禁用密码登录、Root 登录等,最后重启 sshd
- 创建运维用户(可选):用 user 模块添加 deploy 用户、配置 sudo 免密、分发其 SSH 公钥
所有操作默认具备幂等性——多次运行不会重复出错,已生效的步骤会显示 OK 而非 CHANGED。
四、执行与验证
运行命令启动初始化:
ansible-playbook -i ./inventory init-servers.yml -v
-v 显示详细输出,便于排查;如只需测试不真正执行,加 --check 参数;若某步失败,Ansible 会中止并报错行号,方便定位。
执行完成后,可快速验证几项:
- 各主机是否已改名:ansible new_servers -m command -a 'hostname'
- 时间是否同步:ansible new_servers -m command -a 'timedatectl | grep "System clock"
- YUM 是否可用:ansible new_servers -m command -a 'yum makecache --quiet && echo ok'
整个过程无需人工值守,几十台服务器通常在 3–5 分钟内完成标准化初始化。











