一.简介
| 在使用Ansible来批量管理主机的时候通常我们需要先定义要管理哪些主机或者主机组,而这个用于管理主机与主机组的文件就叫做 Inventory ,也叫主机清单。 |
| |
| 该文 件 默 认 位 于/etc/ansible/hosts。 |
| |
| 当然我们也可以通过修改ansible配置文件的Inventory配置项来修改默认inventory的位置。 |
二.定义主机和组
1.定义主机和组
| 中括 号 中 的 名 字 代 表 组 名 ,可以 根 据 自 己 的 需 求 将 庞 大 的 主 机 分 成 具 有 标 识 的 组 , 如上面分了两个组webservers和dbservers组; |
| 主机(hosts)部分可以使用域名、主机名、IP地址表示;当然使用前两者时,也需要主机能反解析到相应的IP地址,一般此类配置中多使用IP地址; |

2.指定主机范围
| 下面指定了从web01到web50,webservers组共计50台主机;databases组有db-a到db-f共6台主机 |

3.定义主机组嵌套
| 如下示例中,production组包含两个子组,分别为webservers和dbservers,webservers和dbservers组分别包含若干主机 |
| |
| [webservers] |
| web1.lab.example.com |
| web2.lab.example.com |
| |
| [dbservers] |
| db1.lab.example.com |
| db2.lab.example.com |
| |
| [production:children] |
| webservers |
| dbservers |
| |
| [production] |
| 192.168.40.11 |
三.选择主机与组
在前 面 定 义 Inventory 的时 候 ,我们会把所有被管理主机通过主机组的方式定义到Inventory当中,但是当我们实际使用的时候,可能只需要对某一主机或主机组进行操作,
这个时候就需要通过匹配的方式指定某一特定主机或主机组。
1. 匹配所有主机
2. 匹配指定的主机或主机组
3. 通配符匹配
4. 通配符组合匹配
| |
| 匹配包含*.example.com但不包含*.lab.example.com的主机 |
| |
| 匹配包含prod以及172开头、包含lab关键字的主机或组 |
| |
| 匹配属于db组同时还属于london组的主机 |
| |
| 匹配在london组或者boston组,还必须在prod组中且必须不在lb组中的主机 |
5. 正则表达式匹配
6. 通过--limit明确指定主机或组
四.Ansible配置文件管理
1.配置文件优先级:ansible的配置文件名为ansible.cfg,它一般会存在于四个地方:
| ANSIBLE_CONFIG:首先,Ansible命令会检查该环境变量,及这个环境变量将指向的配置文件 |
| |
| ./ansible.cfg:当前工作目录,即当前执行ansible指令的目录,如果ANSIBEL_CONFIG环境变量未定义,则优先使用该配置文件 |
| |
| ~/.ansible.cfg:当前用户家目录下的一个隐藏文件,如果当前工作目录下不存在ansible.cfg配置文件,则会查找用户家目录下的该隐藏文件 |
| |
| /etc/ansible/ansible.cfg:默认配置文件,如果上面两个路径下的ansible.cfg都不存在,则使用该文件 |
2.配置文件详解
ansible.cfg的配置默认分为十段:
查看更多
| [defaults]:通用配置项 |
| |
| [inventory]:与主机清单相关的配置项 |
| |
| [privilege_escalation]:特权升级相关的配置项 |
| |
| [paramiko_connection]:使用paramiko连接的相关配置项,Paramiko在RHEL6以及更早的版本中默认使用的ssh连接方式 |
| |
| [ssh_connection]:使用OpenSSH连接的相关配置项,OpenSSH是Ansible在RHEL6之后默认使用的ssh连接方式 |
| |
| [persistent_connection]:持久连接的配置项 |
| |
| [accelerate]:加速模式配置项 |
| |
| [selinux]:selinux相关的配置项 |
| |
| [colors]:ansible命令输出的颜色相关的配置项 |
| |
| [diff]:定义是否在运行时打印diff(变更前与变更后的差异) |
配置参数有:
| [defaults] |
| inventory= /etc/ansible/hosts |
| ask_pass= false |
| remote_user = root |
| log_path= /var/log/ansible.log |
| |
| [privilege_escalation] |
| become=True |
| become_method=sudo |
| become_user=root |
| become_ask_pass=False |
| |
| [ssh_connection] |
| ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no |
| host_key_checking = False |
配置参数说明:
| ◆ inventory:定义默认使用的主机清单 |
| ◆ remote_user: ansible在操作远程主机时,使用远程主机上的哪个用户身份,默认是root |
| ◆ ask_pass:ansible在操作远程主机时,获取远程主机上的用户身份,是否交互提示密码验证,默认为true。如果使用密钥认证的话,建议将其设置为false |
| ◆ log_path :默 认 ansible 执行 的 时 候 , 并不 会 输 出 日 志 到 文 件 , 打开 该 配 置 项 , 所有 的 命 令 执 行 后 , 都会 将 日 志 输 出 到/var/log/ansible.log文件。 |
| ◆ become:如果ansible在操作远程主机时,使用的是远程主机上的普通用户,该普通用户是否允许提权 |
| ◆ become_method:如果允许提权,使用何种提权方式,默认是sudo |
| ◆ become_user:提权到哪个用户身份,默认是root |
| ◆ become_ask_pass:提权时,是否交互提示密码验证,默认为False |
| ◆ ssh_args:ansible通过ssh连接远程被管理机,这里用于定义一些ssh连接时的参数,如-C启用压缩传输,ControlPersist用于提升性能。 |
| ◆ host_key_checking:通过ssh首次连接远程主机时,由于在本机的~/.ssh/known_hosts文件中并有fingerprint key串,ssh第一次连接的时候一般会提示输入yes/no进行确认将key字符串加入到~/.ssh/known_hosts文件中。将此项设置为False将跳过该确认过程。或者在ssh_args中添加参数-o StrictHostKeyChecking=no,也可以实现该功能。 |
五. 配置案例
| ansible在执行ad-hoc的时候,需要使用远程管理机上的一个用户身份,默认这个用户是root,而在实际生产环境中,不建议直接使用root, |
| 而推荐使用一个普通用户,需要配置该普通用户可通过sudo提权。 |
1.在被管理机上创建一个普通用户ansible,并配置sudo提权:
| |
| |
| |
| ansible ALL=(ALL) NOPASSWD:ALL |
2. 在管理端修改ansible.cfg配置文件如下:
| [default] |
| remote_user = ansible |
| ask_pass = False |
| |
| [privilege_escalation] |
| become=True |
| become_method=sudo |
| become_user=root |
| become_ask_pass=False |
3. ssh的秘钥验证在管理端修改ansible.cfg配置文件如下:
| |
| |
| |
| |
| 注意: |
| 创建ssh公钥生成的位置 |
| |
| 说明: |
| 通过上面的操作,需要为ansible用户先创建密码,在实际生产当中,不建议为该用户设置密码。 |
| 可在安装系统时,提前将管理端公钥直接写入到被管理节点的ansible用户下。 |
4. 测试
| |
| |
| 说明: |
| “-m shell”:表示使用 shell 模块 |
| “-a “whoami”:指定要在远程主机上执行的具体命令为 “whoami”,该命令用于显示当前主机登录的用户是谁 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)