一、主机清单 Inventory
核心知识点
- 清单作用:定义 Ansible 管理的主机列表,支持主机分组,单台主机可同时属于多个组
- 清单类型:
- 静态清单:手动编写 INI 格式文件,适合服务器固定的场景
- 动态清单:从云平台 / LDAP/CMDB 自动拉取主机信息,适合云环境动态场景
- 静态清单规则:
- 组名用
[组名]包裹,组内写主机名 / IP - 子组写法:
[父组:children],将多个小组合并为大组 - 范围简化:连续主机可简写为
server[01:20].example.com、192.168.[1:3].[0:255]
- 组名用
重难点
-
子组的层级关系、范围写法的规则
-
清单验证命令的组合使用
查看清单树状结构,检查组/子组关系
ansible-navigator inventory -m stdout --graph
检查单台主机的信息
ansible-navigator inventory -m stdout --host <主机名>
手动指定清单文件
ansible-navigator run ... -i <清单路径>
易错点
- 不要使用系统默认的
/etc/ansible/hosts,每个项目单独在项目目录自建清单文件 - 用
--graph必须加-m stdout,否则会进入交互界面
二、Ansible 配置文件
核心知识点
- 项目内的两个核心配置文件:
ansible.cfg:配置 Ansible 本身的运行行为ansible-navigator.yml:配置 navigator 工具的运行行为
- 配置文件优先级(从高到低,仅生效第一个找到的):
- 当前项目目录的
ansible.cfg - 用户主目录的
~/.ansible.cfg - 系统默认的
/etc/ansible/ansible.cfg
- 当前项目目录的
- ansible.cfg 核心段落:
[defaults]:默认配置,包含默认清单路径、远程用户、SSH 密码提示[privilege_escalation]:提权配置,包含是否默认提权、提权方式、提权目标用户、sudo 密码提示
重难点
-
配置文件的优先级(必考)
-
密码登录的特殊配置
查看当前生效的配置文件
ansible --version
查看所有Ansible配置
ansible-navigator config
易错点
- 密码登录(SSH 密码 /sudo 密码)时,必须在
ansible-navigator.yml中关闭playbook-artifact,否则日志功能会拦截密码输入,无法正常输入密码 - 不要全局开启提权,安全风险高
三、连接与特权升级
核心知识点
- 默认连接方式:SSH,默认使用控制节点当前的用户连接
- 提权(become):先用普通用户登录,再切换到 root 执行管理操作,避免直接用 root 登录,符合安全规范
- 免密 SSH:生产环境标配,用
ssh-copy-id将控制节点公钥分发到受管服务器,无需输入密码
重难点
- 提权的安全用法:在需要 root 权限的 Play 内单独开启
become: true,不要全局开启提权
四、Playbook 核心
核心知识点
-
基础概念:
- Task:最小操作单元,比如安装一个软件,依赖模块实现
- Play:针对一组主机的任务集合,定义这些任务要在哪些服务器上运行
- Playbook:一个或多个 Play 组成的 YAML 文件,Ansible 按顺序执行所有 Play
-
YAML 语法规则(错一个就运行失败,必背):
- 文件后缀
.yml,开头必须写--- - 仅支持空格缩进,绝对不能用 Tab,YAML 不识别 Tab
- 同一层级的内容,缩进必须完全一致,子项要比父项多缩进
key: value冒号后必须加空格- 注释用
#
- 文件后缀
-
Playbook 基础结构:
--- - name: Play的描述 hosts: 目标主机/组 remote_user: 连接用的远程用户 become: 是否开启提权 tasks: - name: 任务的描述 模块名: 参数1: 值1 参数2: 值2 -
模块规则:
- 新版本必须使用FQCN 全称 (如
ansible.builtin.dnf),不要用旧的短名称,否则新版本会报错 - 大部分模块是幂等的:可反复运行 playbook,只要主机已经是你要的状态,模块就不会做任何修改,不会重复操作
- 新版本必须使用FQCN 全称 (如
-
辅助运行选项:
- 语法检查:运行前先检查 playbook 有没有语法错误
- 空运行:模拟运行 playbook,告诉你会修改哪些内容,不实际修改服务器
重难点
-
YAML 语法规则,新手最容易在这里出错
-
幂等性的概念,这是 Ansible 自动化的核心特性
-
多 Play 的配置:一个 playbook 可包含多个 Play,每个 Play 可单独配置用户、提权
语法检查
ansible-navigator run <剧本.yml> -m stdout --syntax-check
空运行(模拟运行)
ansible-navigator run <剧本.yml> -m stdout -C
正常运行
ansible-navigator run <剧本.yml> -m stdout
查看模块文档
ansible-navigator doc <模块名>
易错点
- Tab 缩进、冒号后无空格,直接语法报错
- 忘记加
-m stdout,运行命令后进入交互界面,不知道怎么退出 - 模块不用 FQCN 全称,新版本 Ansible 报错 / 警告
- 滥用 shell/command 模块,优先用正规模块,正规模块是幂等的,更安全
五、特殊模块
核心知识点
无合适的正规模块时,可使用三个特殊模块直接运行命令,不到万不得已不要用:
ansible.builtin.command:最基础的命令模块,不支持 shell 的重定向、管道功能,优先用这个ansible.builtin.shell:支持 shell 的重定向、管道、环境变量,仅需要这些功能时用ansible.builtin.raw:绕过模块系统,无需受管服务器安装 Python,用来管理路由器、交换机这类无 Python 的设备- 模拟幂等:用
creates参数,指定如果某个文件已经存在,就跳过这个任务,避免重复运行
重难点
- 三个模块的使用场景,区分什么时候用哪个
全局易错点汇总
- YAML 缩进用 Tab、冒号后无空格 → 语法报错
- 忘记加
-m stdout→ 进入交互界面 - 密码登录时没关 playbook artifact → 输不了密码
- 全局开启提权 → 安全风险
- 模块不用 FQCN 全称 → 新版本报错
- 滥用 shell 模块,不用正规模块 → 失去幂等性,风险高