目录

管理ansible的配置文件

一,配置ansible

二,据优先级选择执行ansible配置文件

1,按照优先级首先会匹配环境变量ANSIBLE_CONFIG

 2,第二个匹配到./ansible.cfg文件 

3,第三个匹配到~/.ansible.cfg文件

4,当以上文件都不存在时,ansible配置文件就会匹配到/etc/ansible/ansible.cfg

三,管理配置文件中的设置

案例一:

ansible使用ssh连接受管主机

案例二:

关闭主机秘钥验证

案例三:

主机免密登陆,关闭秘钥

案例四:

远程用户sudo提权

案例五:

特权升级


管理ansible的配置文件

一,配置ansible

 通过修改ansible配置文件中的设置来定义ansible安装行为。通过控制节点上多个可能位置之一选择相应位置的配置文件。

 

二,据优先级选择执行ansible配置文件

 执行ansible命令根据所在目录匹配相关ansible配置文件,实践中一般使用ansible命令的目录中创建ansible.cfg文件,此目录中也将包含任何你的ansible项目使用的文件,有清单或者主机清单。

ANSIBLE_CONFIG(ansible环境变量中指向的配置文件)---->./ansible.cfg ---->~/.ansible.cfg ----> /etc/ansible/ansible.conf

  

查看当前使用的是哪个ansible.cfg配置文件,

[root@server ~]# ansible --version

ansible默认配置文件为None ansible配置文件详解_运维

 

 

1,按照优先级首先会匹配环境变量ANSIBLE_CONFIG

 此时的环境变量为空

[student1@server ~]$ echo ANSIBLE_CONFIG

ansible默认配置文件为None ansible配置文件详解_运维_02

  

(1)我们定义环境变量ANSIBLE_CONFIG =  /test/ansible.cfg;定义环境变量需要用export导出

[student1@server ~]$ export ANSIBLE_CONFIG=/test/ansible.cfg

ansible默认配置文件为None ansible配置文件详解_运维_03

 

(2)定义的环境变量有值且对应的文件存在,若匹配到的文件不存在,则按照优先级往下匹配;因为上述操作只是定义了环境变量,但是赋予环境变量的值的文件并不存在,所以匹配到的ansible配置文件为/etc/ansible/ansible.cfg

[student1@server ~]$ ansible --version

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_04

(3) 给/test授予777的权限

[root@server ~]# chmod 777 /test

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_05

 

(4)用studnt1用户创建/test/ansible.cfg文件

[student1@server ~]$ touch /test/ansible.cfg

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_06

 

 

(5)环境变量定义成功,且变量指定的文件存在,则ansible按照优先级匹配到的配置文件为/test/ansible.cfg

[student1@server ~]$ ansible --version

ansible默认配置文件为None ansible配置文件详解_服务器_07

 

 

(6)取消变量名,可以重新连接或者使用取消命令

[student1@server ~]$ unset ANSIBLE_CONFIG

ansible默认配置文件为None ansible配置文件详解_配置文件_08

 

在命令行定义的环境变量临时有效,重启后失效,永久有效可以在/etc/bashrc文件中配置

 

 

 

 2,第二个匹配到./ansible.cfg文件 

(1) 给根目录777的权限

[root@server ~]# chmod 777 /

ansible默认配置文件为None ansible配置文件详解_配置文件_09

(2)创建一个目录/pub,切换到/pub目录下创建/ansible.cfg文件

[student1@server ~]$ mkdir /pub

[student1@server ~]$ cd /pub

[student1@server pub]$ touch /pub/ansible.cfg

ansible默认配置文件为None ansible配置文件详解_配置文件_10

 

(3)此时查看匹配到的ansible配置文件,发现匹配到的ansible配置文件为当前目录下的/ansible.cfg文件

[student1@server pub]$ ansible --version

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_11

 

 

 

3,第三个匹配到~/.ansible.cfg文件

(1)在家目录下创建隐藏文件 ansible.cfg

[student1@server ~]$ touch .ansible.cfg

ansible默认配置文件为None ansible配置文件详解_配置文件_12

 

(2)此时查看匹配到的ansible配置文件,发现发现匹配到的ansible配置文件为 /home/student1/.ansible.cfg文件

[student1@server ~]$ ansible --version

ansible默认配置文件为None ansible配置文件详解_运维_13

 

 

 

4,当以上文件都不存在时,ansible配置文件就会匹配到/etc/ansible/ansible.cfg

[student1@server ~]$ ansible --version

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_14

 

 

 

 

 

 

三,管理配置文件中的设置

1,打开配置文件

[root@server ~]# vim /etc/ansible/ansible.cfg

ansible默认配置文件为None ansible配置文件详解_服务器_15

#               $ ansible-config init --disabled > ansible.cfg

初始化相应的配置参数,并把参数写入到ansible.cfg文件,不生效,以注释显示

#表示注释,解释      ;表示参数

ansible默认配置文件为None ansible配置文件详解_运维_16

 

 

 

2,初始化文件,使用追加符号使其产生的配置文件追加在原有文件后面

[root@server ~]# ansible-config init --disabled >> /etc/ansible/ansible.cfg

ansible默认配置文件为None ansible配置文件详解_运维_17

 

 

3,配置文件由几部分组成,每部分含有以键值对形式定义的设置。部分的标题一方括号括起。重点需要了解以下两部分:

[defaults]

inventory = ./inventory                          #主机列表配置文件

library = /usr/share/my_modules                #库文件存放目录

forks = 5             #默认并发数5 (同时可以处理5个命令--同时有20个节点主机5个主机执行在5个执行)

sudo_user = root                              #默认的sudo用户 root

#ask_sudo_pass = True                      # ansible 2.8版本取消

ask_pass = false                                 #每次执行ansible命令是否询问ssh密码

remout_port = 22                             #  受控主机的端口   

host_key_checking = False              #检查对应服务器的host_key,建议取消注释

log_path = /var/log/ansible.log      #ansible日志文件

module_name = command             #默认模块,可以改为shell

remote_user = user        #要在受管主机上登录的用户名称,没有指定则是当前用户(受管、管控、托管主机的用户名)

remote_tmp = ~/.ansible/tmp ;临时的py命令文件存放在远程主机目录

[privilege_escalation]     ;特权升级

become = true             #连接后是否在受管主机上切换用户,默认会切换到root下

become_method = sudo     #如何切换用户

become_user = root         #受管主机切换到的用户

become_ask_pass = false     #是否为become_method提示输入密码,默认为false

案例一:

ansible使用ssh连接受管主机

一般不建议用管理用户,要求通过普通用户student1进行链接

 

1,在工具栏选择发送键输到所有会话

ansible默认配置文件为None ansible配置文件详解_运维_18

 

2,在控制端主机server创建student1用户并设置密码,受控端node1node2也会自动创建相应的student用户和密码

控制端主机server

[root@server ~]# useradd student1
[root@server ~]# id student1
[root@server ~]# passwd student1

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_19

 受控端主机node1

[root@node1 .ssh]# useradd student1
[root@node1 .ssh]# id student1
[root@node1 .ssh]# passwd student1

ansible默认配置文件为None ansible配置文件详解_配置文件_20

 

受控端主机node2

[root@node2 .ssh]# useradd student1
[root@node2 .ssh]# id student1
[root@node2 .ssh]# passwd student1

ansible默认配置文件为None ansible配置文件详解_linux_21

 

  给student用户配置密码

[root@server ~]# passwd student

ansible默认配置文件为None ansible配置文件详解_配置文件_22

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_23

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_24

 

3,在工具栏选择发送键输到当前会话,取消发送所有会话

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_25

 

 

4,在控制端主机server打开配置文件/etc/ansible/ansible.cfg进行下列配置

[defaults]

#指定自定义主机清单文件

inventory = /test/inventory

#每次指向ansible命令需要询问ssh密码

ask_pass = True 

ansible默认配置文件为None ansible配置文件详解_服务器_26

5,在控制端主机server的普通用户student1使用ssh连接受控端主机node1的普通用户student1,此时需要进行秘钥验证和密码验证

[student1@server ~]$ ssh node1

ansible默认配置文件为None ansible配置文件详解_linux_27

案例二:

关闭主机秘钥验证

在管控主机中通过指定用户发起操作指令,在受管主机中通过ssh远程连接方式以student1用户身份执行,并验证密码;如果ask_pass为false 则可以通过-k  或者--ask-pass来提示接收密码进行验证。

1,在控制端主机server打开配置文件/etc/ansible/ansible.cfg进行下列配置

[defaults]

#指定自定义主机清单文件

inventory = /test/inventory

#每次指向ansible命令需要询问ssh密码

ask_pass = True         

#不需要验证主机秘钥

host_key_checking = False

ansible默认配置文件为None ansible配置文件详解_服务器_28

2,控制端主机server的普通用户student1使用ssh远程连接到受控端主机node1的普通用户student,且不需要秘钥,只需要输入密码即可。

[student1@server ~]$ ssh node1

ansible默认配置文件为None ansible配置文件详解_配置文件_29

如果ask_pass为false 则可以通过-k  或者--ask-pass来提示接收密码进行验证。

案例三:

主机免密登陆,关闭秘钥

如果不需要密码验证(忽略密码验证)则需要配置秘钥验证

1,在控制端主机server上的普通用户student1上产生公钥

[student1@server ~]$ ssh-keygen -t rsa -P '' -q -f ~/.ssh/id_rsa

-t   指定产生的秘钥类型为rsa类型

-P   ' ' 指定设置的私钥密码为空

-q    静默方式产生秘钥

-f     指定存储秘钥的文件的位置

ansible默认配置文件为None ansible配置文件详解_服务器_30

2,将公钥发送到受控端node1与node2上

[student1@server ~]$ for host in node{1..2}; do ssh-copy-id -i $host; done

ansible默认配置文件为None ansible配置文件详解_服务器_31

ansible默认配置文件为None ansible配置文件详解_服务器_32

3,在控制端主机server打开配置文件/etc/ansible/ansible.cfg进行下列配置

[defaults]

#指定自定义主机清单文件

inventory = /test/inventory

#每次指向ansible命令不需要询问ssh密码

ask_pass = False         

#不需要验证主机秘钥

host_key_checking = False

ansible默认配置文件为None ansible配置文件详解_linux_33

4,控制端主机server的普通用户student1免密登录到受控端主机node1与node2上的普通用户student1,既不需要密码验证,也不需要秘钥验证

[student1@server ~]$ ssh node1

ansible默认配置文件为None ansible配置文件详解_linux_34

[student1@server ~]$ ssh node2

ansible默认配置文件为None ansible配置文件详解_服务器_35

案例四:

远程用户sudo提权

1,在受控端主机node1与node2的/etc/sudoers文件中以root身份对student1用户提权,即特权下发,给wheel组的所有用户免密使用特权的权利

%wheel  ALL=(ALL)       NOPASSWD:ALL

ansible默认配置文件为None ansible配置文件详解_服务器_36

 

2,在受控端主机node1与node2把student1加入到wheel组中

[root@node1 ~]# gpasswd -a student1 wheel

ansible默认配置文件为None ansible配置文件详解_服务器_37

[root@node2 ~]# gpasswd -a student1 wheel

ansible默认配置文件为None ansible配置文件详解_服务器_38

 

 

3,此时的dns组下有node1与node2用户组

[student1@server ~]$ ansible-inventory dns --graph

ansible默认配置文件为None ansible配置文件详解_服务器_39

 

4,没配置特权前需要使用sudo命令执行特权操作,不使用sudo指令会报错

[student1@server ~]$ ansible dns -m command -a 'useradd xiao1'

node2 | FAILED | rc=1 >>

useradd: Permission denied.

useradd: cannot lock /etc/passwd; try again later.non-zero return code

node1 | FAILED | rc=1 >>

useradd: Permission denied.

useradd: cannot lock /etc/passwd; try again later.non-zero return code

ansible默认配置文件为None ansible配置文件详解_运维_40

 

5,在控制端server以普通用户student1身份使用sudo命令来执行特权为node1node2添加一个新用户xiao1

[student1@server ~]$ ansible dns -m command -a 'sudo useradd xiao1'

ansible默认配置文件为None ansible配置文件详解_linux_41

 

6,在受控端node1node2查看用户xiao1是否添加成功

ansible默认配置文件为None ansible配置文件详解_配置文件_42

ansible默认配置文件为None ansible配置文件详解_服务器_43

 

 

 

 

案例五:

特权升级

在受控主机中通过sudo提权可在ansible配置中进行优化,开启远程用户在受管主机中执行特权升级。控制主机执行特权命令不需要指定sudo命令

 

1,基于案例四的基础上,进行下列配置

 在控制端server的/etc/ansible/ansible.cfg文件中配置特权升级

[privilege_escalation]     ;特权升级

become = true             #是否开启特权升级

become_method = sudo     #特权升级的模式为

become_user = root         #特权升级的用户为

become_ask_pass = false     #是否为become_method提示输入密码,默认为false,因为在受控端的/etc/sudoers文件中配置了免密;若没配置,此处改为True 

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_44

 

2,此时控制端server可以不加sudo命令来执行特权

[student1@server ~]$ ansible dns -m command -a 'useradd xiao2'

ansible默认配置文件为None ansible配置文件详解_服务器_45

 

3,在受控端node1node2查看用户xiao2是否添加成功

ansible默认配置文件为None ansible配置文件详解_服务器_46

ansible默认配置文件为None ansible配置文件详解_ansible默认配置文件为None_47

 

 

注:在受管主机中进行配置,建议管理sudo用户提权密码验证,如果没有则关闭ask_sudo_pass = True 来开启执行命令sudo提权密码验证;但是ask_sudo_pass = False那么可以空过-K    --ask-become-pass来开启执行命令sudo提权密码验证


查看详细信息,默认最多可以加4V