Ansible 适合想要无代理自动化运维的团队,入门建议从本地安装后通过 SSH 管理少量主机开始,先熟悉 ad-hoc 命令再编写 playbook。
先说结论:适合中小规模服务器管理,优先掌握 inventory 和基础模块,建议在实际测试环境验证幂等性。
- 适合:多台 Linux 服务器配置同步、应用批量部署、定时任务管理。
- 先看:控制节点需安装 Python 3 和 Ansible,被管节点需开放 SSH 并具备 Python 3 环境。
- 建议:先用 ping 模块连通性测试,再写简单 playbook,不要一开始就追求复杂角色。
命令速用版
以下是几个最基础的命令,可在控制节点直接执行:
# 查看版本
ansible `--version`
# 测试所有主机连通性
ansible all -m ping
# 查看主机 uptime
ansible all -m command -a 'uptime'
# 安装 nginx (Ubuntu 示例)
ansible webservers -m apt -a 'name=nginx state=present' `--become`核心工作原理
Ansible 的核心设计是“无代理”(Agentless),它不需要在被管服务器上安装额外守护进程,而是通过 SSH 协议推送模块代码到远程执行。这种架构降低了维护成本,适合快速入门。另一个关键是“幂等性”,即同一个任务执行多次,结果应该一致,不会重复操作或产生副作用。理解这两点,就能明白为什么它适合配置管理而不是高频实时调度。
分步处理
1. 准备控制节点
在一台 Linux 机器上安装 Ansible。推荐使用 pip 安装,以便获取较新版本。
pip3 install ansible2. 配置 Ansible 基础设置
创建 ansible.cfg 文件,用于管理连接行为。测试环境可关闭主机密钥检查,生产环境请谨慎。
[defaults]
host_key_checking = False # 仅测试环境使用,生产环境建议管理 known_hosts
remote_user = ansible_user # 指定远程连接用户3. 配置主机清单
编辑 inventory 文件,默认位置通常在 /etc/ansible/hosts 或当前目录的 hosts 文件。
[webservers]
192.168.1.10
192.168.1.11
[dbservers]
192.168.1.204. 配置 SSH 免密
Ansible 默认依赖 SSH 密钥认证。将控制节点的公钥分发到被管节点普通用户(具备 sudo 权限)。
ssh-copy-id ansible_user@192.168.1.105. 编写第一个 Playbook
创建 site.yml,定义要执行的任务。注意 YAML 格式对缩进敏感。
---
- hosts: webservers
become: yes
tasks:
- name: Ensure nginx is installed
apt:
name: nginx
state: present6. 执行 Playbook
ansible-playbook site.yml怎么验证是否生效
执行完成后,不要只看命令返回的 ok 或 changed 状态,需登录远程服务器确认实际效果。
- 检查服务状态:在被管节点运行
systemctl status nginx确认服务已启动。 - 检查端口监听:使用
ss -tlnp | grep 80确认端口已开放。 - 再次执行:再次运行
ansible-playbook site.yml,观察输出中changed数量是否为 0,以此验证幂等性。
常见坑
- Python 版本依赖:被管节点必须安装 Python 3(Ansible 2.12+ 不再支持 Python 2),否则 Ansible 模块无法运行,会报解释器错误。
- 权限问题:涉及系统配置的任务通常需要提权,记得在 playbook 中加
become: yes或命令行加`--become`。 - 主机密钥检查:首次连接新主机时,SSH 可能会因 host_key_checking 失败,测试环境可在配置中关闭,生产环境建议规范管理 known_hosts。
- 变量优先级:Ansible 变量来源很多(inventory, playbook, vars 等),初学者容易混淆,建议先硬编码测试,再逐步抽取变量。
安全最佳实践
- 避免 Root 直连:建议使用普通用户配合 sudo 提权,而非直接使用 root 用户 SSH 连接。
- 密钥管理:生产环境不要关闭 host_key_checking,防止中间人攻击。
- 最小权限:为 Ansible 专用用户配置仅必要的 sudo 权限。