Ansible 是一款无需被控端代理、基于 SSH 和 YAML 的轻量级自动化运维工具,适用于 Linux 批量管理;需配置免密登录、主机清单和 playbooks,常见问题集中于路径、权限与 YAML 格式。

Ansible 是一款简单、轻量、无需在被控端安装代理(agentless)的自动化运维工具,特别适合批量管理 Linux 服务器。它用 YAML 写任务(playbook),用 SSH 连接目标主机,学习门槛低,上手快。
安装与基础配置
在控制机(你操作的那台机器)上安装 Ansible:
- Ubuntu/Debian:sudo apt update && sudo apt install ansible
- CentOS/RHEL:sudo yum install epel-release -y && sudo yum install ansible(或 dnf)
安装后检查版本:ansible --version。默认配置文件在 /etc/ansible/ansible.cfg,但初学可先不改;主机清单(inventory)建议单独建一个文件,比如 hosts:
<font color="red">[web] 192.168.1.10 192.168.1.11 <p>[db] 192.168.1.20</p></font>
然后用 ansible all -i hosts -m ping 测试连通性(需提前配置好 SSH 免密登录)。
免密登录是前提
Ansible 依赖 SSH,所以必须让控制机能免密码登录到所有目标服务器:
- 在控制机运行 ssh-keygen(一路回车)
- 用 ssh-copy-id user@192.168.1.10 把公钥推过去(user 是目标机上的用户名)
- 测试:ssh user@192.168.1.10 应该直接登录成功
如果目标机禁用了密码登录,请确认 /etc/ssh/sshd_config 中 PubkeyAuthentication yes 已开启,并重启 sshd。
用 Ad-hoc 命令快速批量操作
Ad-hoc 就是临时执行一条命令,适合调试和简单任务:
- 查看所有主机磁盘使用:ansible all -i hosts -a "df -h"
- 批量安装软件(Ubuntu):ansible web -i hosts -m apt -a "name=nginx state=present"
- 重启服务:ansible db -i hosts -m systemd -a "name=mariadb state=restarted"
注意:-m 指定模块,-a 传参数;常用模块还有 copy(传文件)、user(管理用户)、shell(执行复杂命令)等。
写一个简单的 playbook 自动化部署
把重复操作写成 YAML 文件,就是 playbook。例如 deploy_nginx.yml:
<font color="red">---
- name: 部署 Nginx 到 Web 服务器
hosts: web
become: true
tasks:
- name: 安装 Nginx
apt:
name: nginx
state: present
when: ansible_facts['os_family'] == "Debian"
<pre class="brush:php;toolbar:false;">- name: 启动并启用 Nginx
systemd:
name: nginx
enabled: true
state: started
运行:ansible-playbook -i hosts deploy_nginx.yml。注意缩进和冒号格式,YAML 很敏感;become: true 表示提权(相当于 sudo)。
不复杂但容易忽略:inventory 路径、SSH 权限、模块参数拼写、YAML 缩进——这些是新手卡住最常遇到的三件事。











