首页 > 其他分享 >Ansible 的主机清单和配置文件

Ansible 的主机清单和配置文件

时间:2024-10-30 16:58:01浏览次数:1  
标签:配置文件 -- 主机 ansible Ansible hosts ssh 清单

一.简介

在使用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 [email protected]或者IP地址  发送公钥到远程主机

注意:
创建ssh公钥生成的位置

说明:
通过上面的操作,需要为ansible用户先创建密码,在实际生产当中,不建议为该用户设置密码。
可在安装系统时,提前将管理端公钥直接写入到被管理节点的ansible用户下。

4. 测试

# ansible 192.168.159.100 -m shell -a “whoami”   

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

 

标签:配置文件,--,主机,ansible,Ansible,hosts,ssh,清单
From: https://www.cnblogs.com/sleep24/p/18516178

相关文章

  • Ansible原理和安装
    一.概念简介Ansible是一个IT自动化工具。它能配置系统、部署软件、编排更复杂的IT任务,如连续部署或零停机时间滚动更新。连接其他主机(管理节点)默认使用ssh协议特性Agentless:不需要在被管理节点上安装客户端,只要有sshd即可Serverless:在服务端不需要启动任何服务,只需要执......
  • Ansible自动化一键部署单节点&集群架构
    自动化部署利器:Ansible一键部署脚本在现代IT基础设施管理中,Ansible以其简洁、强大的自动化能力脱颖而出。以下是精心打造的Ansible自动化一键部署脚本,旨在简化部署流程,提升效率,确保一致性和可靠性。通过这个脚本,可以轻松实现:一键部署:简化复杂的部署流程,只需一条命令即可启动......
  • docker 安装gitea后,查找对应配置文件路径
    不能直接在系统的根目录访问/data/gitea/conf/app.ini,因为这个路径通常是在Docker容器内的。如果你想在主机上访问这个文件,必须首先确认它是否已挂载到主机的某个目录。如果你想访问app.ini,请按照以下步骤操作:检查Docker容器的挂载:使用以下命令查看容器的详细信息,特别......
  • eslint配置文件eslintrc.js
    eslintrc.js是ESLint的配置文件,主要用于定义代码质量和风格规则。ESLint是一个流行的JavaScript和TypeScript代码静态分析工具,可以帮助开发者识别和修复潜在的代码问题,确保代码的一致性和质量。1.功能配置规则:在eslintrc.js中,你可以指定ESLint应该应用哪些......
  • vue——抽取请求配置文件,打包后修改配置文件可修改请求地址,不用二次打包。问题:本地启
    参考:1.https://blog.csdn.net/u012193330/article/details/83310924  webpack中的path、publicPath、contentBase的区分2.https://www.cnblogs.com/beichengshiqiao/p/17339341.html vue全家桶进阶之路48:Vue3跨域配置devServer的参数和设置3.https://www.cnblogs.com/jing......
  • framework配置文件读取
    写在 app.config 里面<?xmlversion="1.0"encoding="utf-8"?><configuration> <!--运行环境--><startup><supportedRuntimeversion="v4.0"sku=".NETFramework,Version=v4.7.2"/>......
  • Prometheus源码专题精讲——监控系统 Prometheus 2.x/3.x 源码阅读和分析_配置文件的
    配置文件的加载与刷新——config/config.gohttps://github.com/prometheus/prometheus/blob/v2.55.0/config/config.goPrometheus配置文件的加载过程主要可以分为以下两步:1、初始化时加载2、运行时重新加载一、初始化时加载1.1、启动时加载1.2、配置初始化二、运行时加载......
  • Linux Ansible 常用模块教程详解
    Ansible是一款流行的开源自动化工具,它通过简单的模型来管理配置服务器、部署软件以及执行各种IT任务。Ansible使用无代理(agentless)架构,这意味着不需要在被管理的节点上安装额外的软件。以下是一些常用的Ansible模块及其使用方法:1.Command模块Command模块用于在远程主......
  • java - 清单
    java反射机制是什么在运行时动态获取类的信息并操作其成员字段,方法的能力。可以在运行时动态创建对象,访问字段方法,而不需要在编译时确定。......
  • MAVEN配置文件(settings.xml)偏好设置 配置仓库、镜像地址
    1、配置本地仓库在conf/settings.xml文件中,setting标签下配置你的本地maven本地仓库<!--localRepository|Thepathtothelocalrepositorymavenwillusetostoreartifacts.||Default:${user.home}/.m2/repository<localRepository>/path/to/l......