Ansible 自动化运维实战系列(二):主机清单详解
📚 系列导航
👉 第一篇:概述、部署与命令
👉 第二篇:主机清单详解
👉 第三篇:常用模块详解
一:环境架构
是否管理 | 角色 | 主机名 | 外网ip | 内网ip |
---|---|---|---|---|
管理端 | manager | m01 | 192.168.2.110 | 172.16.1.110 |
被管理端 | lb | lb01 | 192.168.2.102 | 172.16.1.102 |
被管理端 | lb | lb02 | 192.168.2.103 | 172.16.1.103 |
被管理端 | web | web01 | 192.168.2.104 | 172.16.1.104 |
被管理端 | web | web02 | 192.168.2.105 | 172.16.1.105 |
被管理端 | web | web03 | 192.168.2.106 | 172.16.1.106 |
被管理端 | nfs | nfs01 | 192.168.2.107 | 172.16.1.107 |
被管理端 | backup | backup | 192.168.2.108 | 172.16.1.108 |
被管理端 | db | db01 | 192.168.2.109 | 172.16.1.109 |
二:配置
/etc/ansible/hosts
:Ansible 的 默认 Inventory(清单)文件,用于定义 Ansible 管理的目标主机(或节点)及其分组信息。它是 Ansible 自动化任务的核心配置文件之一。
三:案例
1)hostname
批量管理主机并执行
hostname
命令
[组名] # 注意组名要体现出服务器的作用
ip地址 / 主机名 / 域名 # 注意主机名要能解析才行
[root@m01 ~]# vim /etc/ansible/hosts
[web]
172.16.1.104
172.16.1.105
[backup]
172.16.1.108
[nfs]
172.16.1.107
2)[data:children]
给
backup
、nfs
2个组合并新的组叫data
[父组名:children]
子组1
子组2
...
[root@m01 ~]# vim /etc/ansible/hosts
[web]
172.16.1.104
172.16.1.105
[backup]
172.16.1.108
[nfs]
172.16.1.107
[data:children]
backup
nfs
3)免密
如果目标主机和本地(Ansible 控制机)之间 没有配置 SSH 免密登录,Ansible 在执行任务时会遇到以下情况:
# Ansible 默认使用 SSH 协议连接目标主机,若未配置免密(密钥认证)且未提供密码,会直接报错 FAILED! => {"msg": "Failed to connect to the host via ssh: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password)."}
解决方案
-
指定临时密码(不推荐)
通过
-k
参数让 Ansible 交互式提示输入密码:ansible all -m ping -k
- 缺点:需手动输入密码,无法完全自动化。
-
Inventory 中明文指定密码(不安全)
在
/etc/ansible/hosts
中直接写入密码:[web] 172.16.1.104 ansible_user=root ansible_ssh_pass=your_password # 明文密码风险高!
- 缺点:密码暴露在文件中,极不安全。
-
配置 SSH 密钥认证(终极方案)
# 1. 本地生成密钥对(如果尚未生成) ssh-keygen -t rsa # 2. 将公钥复制到目标主机 ssh-copy-id root@172.16.1.104 # 3. 测试免密登录 ssh root@172.16.1.104 # 应直接登录,无需密码
- 效果:Ansible 自动使用密钥认证,无需密码。
4)指定hosts
ansible [组名] -i hosts文件路径 -m command -a 'hostname'
总结
本篇主要围绕 Ansible 主机清单(Inventory) 展开,内容涵盖:
✅ 主机清单的基本架构与角色划分:通过实际环境中的 IP、主机名、角色映射,帮助你理清 Ansible 管理节点与被管节点的关系。
✅ 主机清单的书写方式:包括基本的 [组名] 写法、children 子组用法、免密配置技巧等。
✅ 实战案例讲解:一步步带你配置 hosts 文件,熟悉如何按需管理目标主机,如何对不同主机分组,做到分类管理、批量执行。
掌握主机清单的编写,是玩转 Ansible 自动化运维的第一步。合理组织 inventory,将直接影响你后续的 Playbook 管理效率。