从零搭建运维自动化平台:Ansible 控制机部署与首个任务验证
运维自动化平台搭建不一定一上来就上 Jenkins、GitLab CI 或商业运维系统。
如果你只是想批量执行命令、统一分发配置、避免逐台登录服务器,用 Ansible 搭一个轻量控制机是最省事的起点。
它不需要在被管节点装客户端,只要控制机能通过 SSH 登录目标机即可。
下面这套流程在一台 Linux 控制机上完成,目标是把「一台机器批量管多台机器」这条链路先跑通,再往上叠加更复杂的编排。
先确认环境和前提
这套方案适合管理 Linux 服务器、网络可达、且你有目标机登录权限的场景。
开始前请确认以下条件:
- 控制机:一台可用的 Linux(CentOS、Ubuntu、Debian 均可),能访问目标机的 22 端口。
- 目标机:至少一到两台 Linux,且你知道登录用户名和密码或已有密钥。
- 权限:控制机上有
sudo权限,用于安装软件。 - 网络:控制机能
ping通目标机,ssh能正常连接。
先验证连通性,避免后面报错时误判:
ping -c 2 192.168.1.10
ssh root@192.168.1.10
如果 SSH 都连不上,先解决网络或防火墙问题,再继续安装 Ansible。
安装 Ansible 控制机
Ansible 只装在控制机,目标机不需要装。
根据系统选择对应命令:
# Ubuntu / Debian
sudo apt update
sudo apt install -y ansible
# CentOS / Rocky / AlmaLinux
sudo yum install -y epel-release
sudo yum install -y ansible
安装完成后确认版本和可用性:
ansible --version
能正常输出版本信息即表示控制机就绪。
如果提示找不到命令,检查是否安装成功或 PATH 是否异常。
配置 SSH 免密登录
Ansible 默认走 SSH,如果每次都输密码,批量执行会非常麻烦。
推荐用密钥免密:
# 在控制机生成密钥(已存在可跳过)
ssh-keygen -t rsa -b 2048
# 把公钥推送到目标机
ssh-copy-id root@192.168.1.10
推送后测试一次,必须做到不再提示输入密码:
ssh root@192.168.1.10
如果仍要密码,检查目标机 ~/.ssh/authorized_keys 权限是否为 600,以及 ~/.ssh 目录是否为 700。
编写主机清单 Inventory
Inventory 是 Ansible 认识被管节点的入口。
新建一个目录并创建清单文件:
mkdir -p ~/ansible-lab
cd ~/ansible-lab
vi hosts.ini
写入以下内容,把 IP 换成你自己的目标机:
[web]
192.168.1.10
192.168.1.11
[web:vars]
ansible_user=root
分组名 web 可以按业务自定义,ansible_user 指定登录用户。
如果你的 SSH 端口不是 22,再加一行 ansible_port=2222。
跑通第一条批量任务
先用 ping 模块测试控制机与所有目标机的连通性。
注意这里的 ping 不是系统 ping,而是 Ansible 的连通性检测:
ansible -i hosts.ini web -m ping
期望看到每台机器返回 pong 和 SUCCESS。
只要有机器返回 UNREACHABLE,说明 SSH 或网络有问题,先回到免密那一步排查。
连通后执行一条真实命令,比如查看各机器运行时间:
ansible -i hosts.ini web -m command -a "uptime"
如果这条命令能同时返回多台机器的结果,说明你的运维自动化平台骨架已经跑通。
下面就可以把重复操作写成 playbook,例如批量装 Nginx、统一改配置、定时巡检。
容易踩的几个坑
- 在目标机也装了 Ansible:没必要,Ansible 是无代理架构,只有控制机需要装。
- 用 root 直连却未开权限:部分系统默认禁止 root 远程登录,需改用普通用户加
become。 - 主机清单写错分组名:执行时
web必须和hosts.ini里的分组名完全一致。 - 首次连接卡在指纹确认:可临时加
ANSIBLE_HOST_KEY_CHECKING=False跳过,但生产环境建议先手动登录一次确认指纹。 - 防火墙拦截 22 端口:连通性测试失败时,优先检查目标机防火墙规则。
验证是否真的生效
判断平台是否搭好,不只看命令有没有输出,还要确认结果一致:
ansible -i hosts.ini web -m ping全部返回 SUCCESS。- 批量命令返回的机器数量与 Inventory 中定义的数量一致。
- 手动挑一台目标机执行同样命令,结果与 Ansible 返回一致。
- 新增一台目标机后,只改 Inventory 就能纳入管理,无需改动控制机其他配置。
满足这几条,说明基础自动化链路可靠。
后续再引入 playbook、角色和定时任务,风险会低很多。
常见疑问
必须用 Ansible 吗,Python 脚本不行吗?
脚本适合单次或少量机器,机器一多、逻辑一复杂,维护成本会快速上升。Ansible 用声明式配置和现成模块,更利于长期维护和交接。
目标机是 Windows 可以吗?
Ansible 管理 Windows 需要走 WinRM 并安装相应模块,配置方式和 Linux 不同,新手建议先用 Linux 跑通再扩展。
控制机需要一直开着吗?
执行任务时需要在线,任务执行完可以关闭;但如果你用定时任务做巡检,控制机需保持运行。
先把控制机、免密和 Inventory 这三件事做扎实,运维自动化平台搭建的后续步骤会顺很多。
遇到报错时,优先回到连通性和权限这两层排查,多数问题都能定位。