ansible不参与裸机安装,专精于系统初始化配置:网络与时间同步、ssh加固、源配置、工具安装、防火墙启用、用户管理及安全基线设置,并强调变量驱动、幂等性、失败中断、最小权限和流程集成。

服务器系统安装本身(如 CentOS ISO 引导、磁盘分区、内核选择)通常由 PXE + Kickstart、Cobbler 或云平台镜像模板完成,Ansible 不直接参与裸机安装过程。但系统安装完成后的初始化配置——也就是让一台刚装好基础系统的服务器达到可用、安全、统一的运行状态——正是 Ansible 最擅长、最常用、最落地的场景。
初始化配置的核心目标
不是“装完系统就完事”,而是确保每台服务器在交付使用前已具备以下能力:
- 网络连通且主机名、时区、时间同步(chrony/ntp)正确
- SSH 安全加固(禁用 root 密码登录、限制用户、调整超时)
- 基础软件源配置(如更换为国内镜像源)
- 必要工具包安装(vim、curl、wget、jq、unzip 等)
- 防火墙策略启用(firewalld 或 ufw)并开放必要端口
- 创建标准运维账户(非 root)、配置 sudo 权限和 SSH 免密登录
- 基础安全基线(如禁用不安全协议、设置密码策略、清理默认账户)
典型初始化 Playbook 结构
一个生产可用的初始化 playbook(例如 init-server.yml)通常按逻辑分阶段执行:
- setup:收集目标主机 facts(操作系统、IP、架构等),用于条件判断
- configure-system:设时区、同步时间、配置 hostname、更新 hosts 文件
-
secure-ssh:修改
/etc/ssh/sshd_config,重载服务,禁用密码认证 - prepare-repo:备份原 repo,写入阿里云/清华源配置(区分 CentOS/RHEL/Ubuntu)
-
install-tools:用
yum或apt模块批量安装常用工具 -
manage-users:用
user模块创建 deploy 用户,authorized_key模块注入公钥 -
enable-firewall:用
firewalld模块开启服务并放行 ssh/http/https
关键实践要点
避免“写完就跑”,真正让初始化稳定可靠需注意:
-
变量驱动:把用户名、SSH 端口、时区、镜像源地址等抽成
group_vars/all.yml或命令行-e参数,不同环境(测试/生产)只需切换变量,不用改 playbook -
幂等性验证:每次执行后检查是否真没重复操作——比如
user模块加state: present,copy模块加backup: yes,避免误覆盖 -
失败即中断:初始化是前置步骤,任一环节失败(如时间同步失败、SSH 重载失败)应立即中止,不继续往下执行;可在 play 级加
any_errors_fatal: true -
最小权限原则:Playbook 默认以普通用户连接,仅在必要步骤(如改系统配置)临时提权,用
become: true显式声明 -
跳过已配置项:对耗时长的操作(如源更新),用
changed_when: false或注册结果配合when判断,提升后续执行效率
执行与集成建议
初始化不是一次性动作,而应嵌入整个交付流程:
- 首次执行:用
ansible-playbook -i inventory/production init-server.yml --limit web01单台验证 - 批量上线:配合动态 inventory(如从 CMDB API 拉取新机器 IP),一键初始化整批节点
- CI/CD 集成:在 Jenkins/GitLab CI 中触发,新服务器自动加入集群前必须通过初始化流水线
- 版本管控:playbook 和 inventory 全部纳入 Git,每次变更可追溯、可回退、可 Code Review











