Ansible 的主机清单和配置文件

news/2024/10/30 17:10:22/文章来源:https://www.cnblogs.com/sleep24/p/18516178

一.简介

在使用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组分别包含若干主机

 三.选择主机与组

在前 面 定 义 Inventory 的时 候 ,我们会把所有被管理主机通过主机组的方式定义到Inventory当中,但是当我们实际使用的时候,可能只需要对某一主机或主机组进行操作,
这个时候就需要通过匹配的方式指定某一特定主机或主机组。

 1. 匹配所有主机

# ansible all--list-hosts all表示匹配所有的主机

2. 匹配指定的主机或主机组

# ansible prod --list-hosts                   匹配单个组
# ansible db2.example.com --list-hosts        匹配单个主机
# ansible 'lb1.lab.example.com,s1.lab.example.com,db1.example.com' --list-hosts    匹配多个主机
# ansible 'london,boston' --list-hosts                                             匹配多个组
# ansible ungrouped --list-hosts                                        匹配不属于任何组的主机

3. 通配符匹配

# ansible '*.example.com' --list-hosts        匹配'*.example.com’
# ansible '172.25.*' --list-hosts             匹配172.25.*的主机
# ansible 's*' --list-hosts                   匹配以s开头的主机及主机组

4. 通配符组合匹配

# ansible '*.example.com,!*.lab.example.com' --list-hosts
匹配包含*.example.com但不包含*.lab.example.com的主机
# ansible 'prod,172*,*lab*' --list-hosts
匹配包含prod以及172开头、包含lab关键字的主机或组
# ansible 'db,&london' --list-hosts
匹配属于db组同时还属于london组的主机
# ansible 'boston,london,&prod,!lb' --list-hosts
匹配在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提权:

# useradd ansible 创建ansible用户# vim /etc/sudoers.d/ansible 设置ansible用户可免密提权       //创建文件写入以下代码
ansible ALL=(ALL) NOPASSWD:ALL

2. 在管理端修改ansible.cfg配置文件如下:

[default]
remote_user = ansible            //定义远程用户
ask_pass = False                 //连接远程用户时不询问密码[privilege_escalation]
become=True                           //启用权限提升功能。这意味着如果当前连接的用户没有足够的权限执行某些任务,可以通过权限提升来获取更高的权限。
become_method=sudo                   //指定权限提升的方法为使用 “sudo” 命令
become_user=root                    //定义了权限提升后的目标用户为 “root” 用户。
become_ask_pass=False

3. ssh的秘钥验证在管理端修改ansible.cfg配置文件如下:

# ssh-keygen 生成密钥对# ssh-copy-id -i .ssh/id_rsa.pub ansible@db1.example.com或者IP地址  发送公钥到远程主机注意:
创建ssh公钥生成的位置说明:
通过上面的操作,需要为ansible用户先创建密码,在实际生产当中,不建议为该用户设置密码。
可在安装系统时,提前将管理端公钥直接写入到被管理节点的ansible用户下。

4. 测试

# ansible 192.168.159.100 -m shell -a “whoami”   说明:
“-m shell”:表示使用 shell 模块
“-a “whoami”:指定要在远程主机上执行的具体命令为 “whoami”,该命令用于显示当前主机登录的用户是谁

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/824215.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年项目经理必看!项目管理平台如何助力项目成功交付?

一、项目管理平台的重要性 在 2024 年,项目管理平台对于项目成功交付起着至关重要的作用。 首先,项目管理平台能够极大地提高协作效率。例如,像 禅道 这样的优秀平台,为团队提供了统一的协作空间,成员可以在平台上共享文档、讨论问题、分配任务等。通过这种方式,信息传递…

嗅探与欺诈实验

作业题目 包嗅探和欺骗是网络安全中的两个重要概念;它们是网络通信中的两大威胁。能够理解这两种威胁对于理解网络中的安全措施至关重要。有许多包嗅探和欺骗工具,如Wireshark、Tcpdump、Netwox等。其中一些工具被安全专家以及攻击者广泛使用。能够使用这些工具对学生来说很重…

强势建议收藏!2024年工程项目管理平台上的10个高效工具

一、多功能的禅道 禅道作为工程项目管理平台,拥有众多强大功能。 在项目管理和协作方面,禅道集成了产品管理、项目管理、质量管理、文档管理、组织管理和事务管理等多方面功能,完整覆盖了工程项目管理的核心流程。通过禅道,团队成员可以清晰地了解项目的各个环节,从需求收…

TCP攻击实验

作业题目 本实验的学习目标是让学生获得有关漏洞以及针对这些漏洞的攻击的第一手经验。聪明人从错误中学习。在安全教育中,我们研究导致软件漏洞的错误。研究过去的错误不仅有助于学生理解为什么系统容易受到攻击,为什么“看似良性”的错误会变成灾难,以及为什么需要许多安全…

环境变量与set-uid实验

作业题目 本实验室的学习目标是让学生了解环境变量如何影响程序以及系统行为。环境变量是一组动态命名值,可以影响正在运行的进程将在计算机上运行。大多数操作系统都使用它们,因为它们是1979年引入Unix。尽管环境变量会影响程序行为,但它们是如何实现的这一点很多程序员都不…

XSS攻击实验(Elgg)

作业题目 跨站点脚本(XSS)是一种常见于web应用程序中的计算机安全漏洞。此漏洞使攻击者有可能将恶意代码(如JavaScripts)注入受害者的web浏览器。 为了演示攻击者可以做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的web应用程序。我们已经注释掉了Elgg的一些…

USB E-Maker用途

E-Marker 是“Electronically Marked Cable”的缩写,是封装在 USB-C端口中的芯片。通过这个芯片,可以得到电缆的各种参数,包括功率、数据、视频传输、ID等信息。由于 Type-C 设备之间的功能差异很大,因此在决策过程中考虑电缆至关重要。例如,如果源和接收设备都需要 100W …

ENVI6.1新功能

ENVI 6.1于2024年10月正式发布,ENVI6.1此版本包括以下新增功能和改进功能:添加了对新的数据类型的支持 空间和光谱裁剪功能增强 新的基于BandMax和SAM的目标探测工作流工具 ENVI API和Modeler中增强的光谱处理 新的光谱指数 新的黑暗模式主题 新增和更新ENVI Toolbox工具 新增…

制作游戏加载进度条

首先,我们需要有一个背景进度条,然后在背景下面添加显示百分比的进度条图片,再创建一个Text,用于显示具体的百分比数字 大致结构如下:然后就是通过代码实现这个功能了:[SerializeField] private Image ProcessBar; [SerializeField] private Text ProcessText; private f…

【Unity】Addressables下的图集(SpriteAtlas)内存优化

前言:资源管理系统:AddressablesUI:模拟NGUI图集Sprite,在UGUI下继承Image增加UIImage组件,实现将SpriteAtlas组件拖拽到属性面板上,切换选择里面的小图问题:在检查项目内存占用过高问题时,发现直接拖拽上去的资源不受Addressables系统的自动引用管理,导致部分资源虽然…

O(∩_∩)O哈哈~

本文来自博客园,作者:一石数字欠我15w!!!,转载请注明原文链接:https://www.cnblogs.com/52-qq/p/18516047

我用这个 AI 工具生成单元测试,简直不要太爽!

本文分享如何使用驭码CodeRider 的单元测试功能生成单元测试文件。 在之前的文章如何用 Python 手撸一个 GitLab 代码安全审查工具?中,我用 Python 写了一个接受极狐GitLab 代码安全审计事件流并且将消息推送到钉钉群的脚本,完整的 python 代码为:from fastapi import Fast…