ansible 通过 ssh 实现无代理批量运维,核心是将重复操作代码化、可复用、可验证、可回溯;需在控制节点安装 ansible、配置免密 ssh、定义主机清单、用 ad-hoc 命令快速调试、编写幂等 playbook 标准化部署。

用 Ansible 管理服务器,核心是把重复操作变成可复用、可验证、可回溯的代码。它不依赖目标机装代理,只靠 SSH 连接就能批量执行命令、同步配置、启停服务、创建用户——真正实现“改一次,全生效”。
控制节点安装与基础准备
先在一台 Linux 机器(比如你的运维跳板机或笔记本 WSL2)上装好 Ansible:
- CentOS/RHEL:运行
yum install -y epel-release ansible - Ubuntu/Debian:运行
apt update && apt install -y ansible - 验证:执行
ansible --version确认输出版本号(如 ansible [7.6.0])
确保所有被管服务器已开通 SSH,并且控制节点能免密登录(推荐配置 SSH 密钥,避免在 Playbook 中硬编码密码)。
定义主机清单(Inventory)
编辑 /etc/ansible/hosts 或自定义路径(如 inventory/prod.ini),按业务逻辑分组:
- 用方括号定义组名,例如
[web_servers]、[db_servers] - 支持 IP、域名、范围写法:
web[01:05].example.com - 可为单台主机指定变量:
db1 ansible_host=192.168.1.20 ansible_user=deploy - 统一变量写在
[all:vars]下,如ansible_ssh_private_key_file=~/.ssh/id_rsa
执行 ansible-inventory --graph 可直观查看分组结构,避免配错主机归属。
用 Ad-Hoc 命令快速验证和调试
不用写文件,直接在命令行跑临时任务,适合巡检、初始化或紧急修复:
- 连通性测试:
ansible all -m ping - 批量关防火墙:
ansible web_servers -m service -a "name=firewalld state=stopped enabled=no" --become - 同步时间:
ansible all -m command -a "timedatectl set-ntp true" - 查磁盘使用:
ansible db_servers -m shell -a "df -h | grep '/$'"
加 --limit db_servers 可限制执行范围;加 --check 可试运行(不真改),确认效果再正式执行。
编写 Playbook 实现标准化配置
把一系列操作写成 YAML 文件(如 setup-servers.yml),做到“一次编写,多次复用”:
-
hosts:指定目标主机组(如web_servers) -
become: true表示提权(等效 sudo),多数配置类任务都需要 - 每个
task调用一个模块:user创建账户、copy推配置、yum/apt装软件、lineinfile修改配置行 - 利用
when:做系统判断,比如区分 CentOS 和 Ubuntu 安装不同包管理器的工具 - 用
notify:+handlers:实现“改完配置自动重启服务”,避免重复触发
执行命令很简单:ansible-playbook -i inventory/prod.ini setup-servers.yml。Playbook 天然幂等——反复运行结果一致,不怕误点重跑。











