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 编写,描述“要做什么”和“怎么做”,适合重复性、多步骤任务。
强大、易用的CuuMall发布新版本了,CuuMall网上商城系统是使用PHP开发的一套免费的开源商城系统,CuuMall最新版本v2.3在CuuMall v2.2稳定版本的基础上做了三十多项大小功能的升级及改进,此次更新进一步完善了CuuMall商城系统,使得2.3版本的CuuMall免费商城系统更加稳定,速度更快,上手更容易! CuuMall商城秉承简单易用的理念,将购物流程、开店流程尽量的简
示例:部署 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 通开始,逐步封装常用操作,自然就上手了。









