ansible是无需代理、基于ssh的轻量自动化运维工具,支持配置管理与任务编排;通过inventory定义主机、ad-hoc执行即时命令、playbook编写YAML剧本实现自动化。

Ansible 是一个简单、轻量、无需在被控端安装代理(agentless)的自动化运维工具,适合配置管理、应用部署和任务编排。掌握基础用法,几分钟就能完成批量服务器操作。
安装与环境准备
Ansible 运行在控制节点(通常是你的本地机或跳板机),通过 SSH 管理远程主机,不要求目标机器安装额外软件。
- ubuntu/debian:运行 sudo apt update && sudo apt install ansible
- CentOS/RHEL:先启用 EPEL 源,再执行 sudo yum install epel-release && sudo yum install ansible(RHEL 8+ 可用 dnf)
- 确认安装成功:ansible –version
- 确保控制节点能免密 SSH 登录目标主机(配置好 SSH key,建议测试 ssh user@host)
编写第一个 Inventory(主机清单)
Inventory 定义你要管理的主机和分组,可以是 INI 或 YAML 格式,默认路径为 /etc/ansible/hosts,也可自定义。
例如,新建文件 my_hosts:
[web] 192.168.1.10 192.168.1.11 <p>[db] 192.168.1.20</p><p>[all:vars] ansible_user=ubuntu ansible_ssh_private_key_file=~/.ssh/id_rsa </p>
上面定义了 web 和 db 两个主机组,并统一设置登录用户和密钥路径,方便后续调用。
执行 Ad-hoc 命令(即时任务)
Ad-hoc 命令适合快速验证或单次操作,语法为:ansible -m -a
- 测试连通性:ansible all -i my_hosts -m ping
- 查看所有主机磁盘使用:ansible web -i my_hosts -m command -a “df -h”
- 复制文件到远程:ansible db -i my_hosts -m copy -a “src=./app.conf dest=/etc/myapp.conf”
- 重启服务(需权限):ansible web -i my_hosts -m service -a “name=nginx state=restarted”
注意:-i 指定 inventory 文件;-m 指定模块(如 ping、copy、shell、yum、apt、service 等);-a 传入模块参数。
编写 Playbook(自动化剧本)
Playbook 是 Ansible 的核心,用 YAML 编写,描述“要做什么”和“怎么做”,适合重复性、多步骤任务。
示例:部署 Nginx 到 web 组(保存为 deploy_nginx.yml):
--- - name: Deploy Nginx to web servers hosts: web become: true tasks: - name: Install nginx package apt: name: nginx state: present when: ansible_facts['os_family'] == "Debian" <pre class="brush:php;toolbar:false;">- name: Ensure nginx is running and enabled service: name: nginx state: started enabled: true
执行命令:ansible-playbook -i my_hosts deploy_nginx.yml
关键点说明:
- hosts 指定目标主机组
- become: true 表示以 root 权限执行(等价于 sudo)
- tasks 下每项是一个原子操作,有明确 name 便于追踪
- when 实现条件判断,适配不同系统
小贴士与常见问题
初次使用容易卡在权限或连接环节:
- 报错 “UNREACHABLE!”:检查 SSH 是否通、目标端口(默认 22)、防火墙、用户权限
- 报错 “FAILED! => {“msg”: “Missing become password”}”:加上 –ask-become-pass 手动输入 sudo 密码,或配置无密码 sudo
- 想看详细执行过程:加 -v(verbose),多次叠加如 -vvv 查看更底层日志
- 只测试不真正执行:加 –check 参数(部分模块支持)
Ansible 入门不难,关键是理解 inventory + ad-hoc + playbook 这三层递进关系。从 ping 通开始,逐步封装常用操作,自然就上手了。