一 配置文件的优先级

ansible的配置文件名为ansible.cfg,它一般会存在于四个地方:

  1. ANSIBLE_CONFIG:首先,Ansible命令会检查该环境变量,及这个环境变量将指向的配置文件
  2. ./ansible.cfg:当前工作目录,即当前执行ansible指令的目录,如果ANSIBEL_CONFIG环境变量未定义,则优先使用该配置文件
  3. ~/.ansible.cfg:当前用户家目录下的一个隐藏文件,如果当前工作目录下不存在ansible.cfg配置文件,则会查找用户家目录下的该隐藏文件
  4. /etc/ansible/ansible.cfg:默认配置文件,如果上面两个路径下的ansible.cfg都不存在,则使用该文件

配置文件中所有的配置项都可以通过环境变量的方式来定义,而环境变量定义的配置项具有最高优先级,会覆盖掉所有配置文件中的配置项

[root@node1 ansible]# cp ansible.cfg /root/
[root@node1 ansible]# vim /root/ansible.cfg

#修改remote用户为root
remote_user = root

进入root目录下

[root@node1 ansible]# cd

[root@node1 ~]# ansible -i /etc/ansible/inventory web -m shell -a "whoami"

进入/etc/ansible目录下

插入一个环境变量

[root@node1 ansible]# export ANSIBLE_CONFIG=/aaa/bbb/ansible.cfg
[root@node1 ansible]# ansible -i /etc/ansible/inventory web -m shell -a "whoami"

当变量不存在,使用用户的家目录藏文件

[root@node1 ansible]# cd /opt/

[root@node1 opt]# mv /root/ansible.cfg /root/.ansible.cfg

[root@node1 opt]# ansible -i /etc/ansible/inventory web -m shell -a "whoami"

使用当前目录的ansible.cfg

[root@node1 ansible]# mkdir -p /aaa/bbb

[root@node1 ansible]# cp /root/ansible.cfg $ANSIBLE_CONFIG

[root@node1 ansible]# ansible -i /etc/ansible/inventory web -m shell -a "whoami"

优先级顺序:环境变量---->家目录隐藏文件------>当前目录下文件------>默认位置文件

二 配置文件分段说明

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(变更前与变更后的差异)

三 配置参数说明

[default]
inventory = /etc/ansible/hosts
remote_user = root
ask_pass = false
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
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连接一些常见的错误说明

ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program

完整错误示例如下:

root@ctnr:/etc/ansible# ansible '*.a32-168-1.*' -m ping
ctnr.a32-168-1.prod.yiz | FAILED! => {
"failed": true,
"msg": "ERROR! to use the 'ssh' connection type with passwords, you must install the sshpass program"
}

一般出现这种错误,是在通过密码验证远程被管理机的时候,需要在server端安装sshpass:

yum install sshpass -y 

Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host

完整错误如下:

ansible test -a 'uptime'

192.168.1.1| FAILED =>Using a SSH password instead of a key is not possible because HostKey checking is enabled and sshpass does not support this.Please add this host's fingerprint to your known_hosts file to manage this host.
192.168.1.2 | FAILED => Using a SSH password instead of a key is not possible because Host Key checking is enabled and sshpass does not support this. Please add this host's fingerprint to your known_hosts file to manage this host.

这种错误通常就出现在server端第一次连接被管理机的时候,就是上面说到的需要通过输入yes/no进行确认将key字符串加入到~/.ssh/known_hosts文件中。

解决办法有两个:

  • 通过修改上面提到的host_key_cheking,将其设置为false(在实际测试中,似乎并没有效果)
  • 通过修改ssh_args参数,修改如下:
ssh_args = -C -o ControlMaster=auto -o ControlPersist=60s -o StrictHostKeyChecking=no 

指定hosts文件

inventory      = /etc/ansible/inventory

查看

[root@node1 ansible]# cat /etc/ansible/inventory

[web]
node1
node2
[mysql]
node3
node4
[redis]
node5
[php]
node1
node3

执行

[root@node1 ansible]# ansible  all  -m shell -a "whoami"

一共五个主机,后面就是用ansible对着五个主机进行操作


博主声明:本文的内容来源主要来自誉天教育晏威老师,由本人实验完成操作验证,需要的博友请联系誉天教育(http://www.yutianedu.com/),获得官方同意或者晏老师(https://www.cnblogs.com/breezey/)本人同意即可转载,谢谢!

003.Ansible配置文件管理的更多相关文章

  1. Linux安装LAMP开发环境及配置文件管理

    Linux主要分为两大系发行版,分别是RedHat和Debian,lamp环境的安装和配置也会有所不同,所以分别以CentOS 7.1和Ubuntu 14.04做为主机(L) Linux下安装软件,最 ...

  2. Python-day3作业-haproxy配置文件管理脚本

    #!/usr/bin/env python import os,sys,time,re,prettytable,json from collections import defaultdict,Ord ...

  3. 【C#进阶系列】03 配置文件管理与程序集的引用版本重定向

    先来点与标题不相关的: CLR支持两种程序集:弱命名程序集和强命名程序集. 两者的区别在于强命名程序集使用发布者的公钥和私钥进行签名.由于程序集被唯一性地标识,所以当应用程序绑定到强命名程序集时,CL ...

  4. C#配置文件管理

    最近在做项目的过程中用到配置文件,本文简要说明本人在项目过程中是如何使用配置文件的,目的是加深自己对配置文件管理的理解,以便在下次使用时能做到轻松自如. 配置文件,顾名思义,是用户在使用系统或者软件时 ...

  5. 死磕salt系列-salt 配置文件管理

    SLS是Salt State系统的核心,用来描述系统的目标状态,使用YAML语言书写.被用作配置文件管理. SLS文件 sls配置文件分为两种类型 top.sls 这是所有配置文件的入口 sls 这是 ...

  6. disconf实践(四)基于注解的分布式配置文件管理,自动reload

    上一篇讲解了基于xml的自动reload的分布式配置文件管理,这一篇讲解基于注解的自动reload的方式(基于disconf实践二). 1. 修改spring配置文件 <?xml version ...

  7. disconf实践(三)基于XML的分布式配置文件管理,自动reload

    上一篇介绍了基于xml的非自动reload的分布式配置文件管理,这一篇介绍自动reload的方式(基于disconf实践二). 1. 修改RedisConfig.java package org.sp ...

  8. Ansible配置详解

    目录 Ansible配置详解 参考 配置优先级 配置参数说明 Ansible配置详解

  9. Haproxy安装部署文档及多配置文件管理方案

    一.部署安装 二.软件配置 三.系统服务 四.日志配置 五.小结 文章目录 最近我在负责一个统一接入层的建设项目,涉及到 Haproxy 和 ospf 的运维部署,本文分享一下我在部署 Haproxy ...

随机推荐

  1. 使用VS Code从零开始开发调试.NET 5

    使用VS Code 从零开始开发调试.NET 5.无需安装VS 2019即可开发调试.NET 5应用. VS Code 全称是 Visual Studio Code,Visual Studio Cod ...

  2. 学习WEB前端是应该自学还是参加培训机构?

    先说观点,我强烈建议每个人都要自学,不要参加培训班. 我干web前端工程师这个职位已经有6年多的时间,之前在蚂蚁金服做过2年,后来离开是因为加班实在熬不住才走的,像这些已经上市的互联网公司几乎没有不加 ...

  3. 12.Quick QML-QML 布局(Row、Column、Grid、Flow和嵌套布局) 、Repeater对象

    1.Row布局 Row中的item可以不需要使用anchors布局,就能通过行的形式进行布局. 并且item可以使用Positioner附加属性来访问有关其在Row中的位置及其他信息. 示例如下所示, ...

  4. 我与Git的那些破事(上)--代码管理

    1. Git是什么? 作为一名程序猿,我相信大家都或多或少接触过git--分布式版本控制软件. 有人说,它是目前世界上最先进的分布式版本控制系统,我想说,是否最先进不知道,但确实好用,实用. 作为一款 ...

  5. 【运维】Shell -- 快速上手Shell脚本

    1.Shell概述 shell脚本是利用shell的功能所写的一个[程序(program)].这个程序是使用纯文本文件,将一些shell的语法与命令(含外部命令)写在里面,搭配正则表达式.管道命令与数 ...

  6. HUAWEI AppGallery Connect 正式发布移动端App,随时随地掌握应用动态

    华为应用市场AppGallery Connect应用一站式服务平台正式发布移动端App,帮助您随时随地查看应用信息,获取运营分析数据,接收重要消息通知,快速回复用户评论等,提升应用的运营管理效率,更便 ...

  7. 【pytest官方文档】解读fixtures - 3. fixtures调用别的fixtures、以及fixture的复用性

    pytest最大的优点之一就是它非常灵活. 它可以将复杂的测试需求简化为更简单和有组织的函数,然后这些函数可以根据自身的需求去依赖别的函数. fixtures可以调用别的fixtures正是灵活性的体 ...

  8. 1149 Dangerous Goods Packaging

    When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...

  9. pwn 好的联系网站

    https://pwnable.kr/ https://w3challs.com/challenges/wargame http://overthewire.org/wargames/ http:// ...

  10. DVWA之 SQL Injection(Blind)

    SQL Injection(Blind) SQL Injection(Blind),即SQL盲注,与一般注入的区别在于,一般的注入攻击者可以直接从页面上看到注入语句的执行结果,而盲注时攻击者通常是无法 ...