Ansible 适合希望通过 SSH 协议实现无代理自动化运维的场景,控制节点安装后即可管理支持 SSH 的目标主机,无需在被管节点安装客户端。
先说结论:Ansible 核心优势在于无代理架构和 YAML 语法,适合配置管理、应用部署及任务编排,新手建议从静态清单和 ad-hoc 命令入手。
- 适合:系统管理员、DevOps 工程师及需要管理多台服务器的技术人员,尤其是希望避免在目标机安装代理的场景。
- 先看:主机清单(Inventory)配置、SSH 免密连接设置及 ansible.cfg 核心配置文件优先级。
- 建议:先在测试环境验证 playbook 幂等性,推荐使用完全限定集合名称(FQCN)调用模块以避免冲突。
环境准备与安装
控制节点支持 Linux、macOS 或 Windows(通过 WSL)。确保控制节点已安装 Python 3。以下是主流系统的具体安装命令:
# Ubuntu/Debian
sudo apt update
sudo apt install ansible# CentOS/RHEL
sudo yum install ansible# 通用 pip 安装
pip3 install ansible# 验证安装版本及配置路径
ansible `--version`配置 SSH 免密连接
Ansible 默认通过 SSH 连接被管节点,建议配置公钥认证以避免每次输入密码。在控制节点执行以下命令将公钥分发到目标主机:
ssh-copy-id user@192.168.1.10若提示权限错误,可手动将控制节点的~/.ssh/id_rsa.pub 内容追加到目标主机的~/.ssh/authorized_keys,并确保权限为 600。
主机清单与配置
默认清单文件为/etc/ansible/hosts,支持 INI 格式。建议在项目目录自定义清单,通过-i 或`--inventory` 指定路径。格式示例:
[webservers]
192.168.1.10
192.168.1.11配置文件 ansible.cfg 有优先级(项目目录 > 用户主目录 > 系统默认),可用 ansible `--version` 查看当前生效配置路径。
命令速用与 Playbook 实战
以下是快速验证环境可用的基础命令,直接在控制节点执行:
# 测试所有主机连通性
ansible all -m ping# 查看主机清单列表
ansible-inventory `--list`# 运行临时命令查看远程主机 uptime
ansible all -m command -a "uptime"编写 Playbook 时,YAML 文件以---开头,仅用空格缩进(禁止 tab),同级元素缩进一致。任务调用 Ansible 模块实现功能,示例:
---
- name: 创建指定 UID 的用户hosts: webserverstasks:- name: 确保 newbie 用户存在ansible.builtin.user:name: newbieuid: 4000state: present验证方法
执行 playbook 后,观察命令输出中的 changed 和 ok 状态。若多次运行同一 playbook,changed 数量应为 0,表明幂等性生效。使用 ansible-inventory `--list` 可查看主机列表,使用 ansible-inventory `--graph` 可查看组结构。对于具体任务,如创建用户,可在目标主机执行 id newbie 确认用户及 UID 是否符合预期。
常见问题排查(Troubleshooting)
- SSH 连接失败:检查控制节点到目标节点的网络连通性,确认 SSH 服务已启动,端口是否为 22,或是否在 ansible.cfg 中指定了正确端口。
- 权限拒绝(Permission Denied):若任务需要 root 权限,需在 Playbook 任务中添加 become: true,或命令行添加`--become`。
- Python 版本问题:被管节点需安装 Python 2.6+ 或 3.5+,若目标机为最小化安装,可能需要先手动安装 Python。
- YAML 语法错误:缩进必须使用空格,禁止使用 tab 键,冒号后必须加空格,列表项以 - 开头。
- 模块名称冲突:推荐使用完全限定集合名称(如 ansible.builtin.user),避免不同集合间模块名冲突。
参考来源
- Ansible 官方文档
- Ansible 入门指南
原文链接:https://www.zjcp.cc/ask/11136.html
