ansible的基本配置

一、主机清单

1、定义主机

  • 主机的定义可以使用域名,主机名,ip地址来定义,需要主机能够解析到对应的ip地址
[root@master ansible]# cat hosts 
node1
node2
qq1.com
192.168.50.10


# ansible all --list 就是列出主机清单中的所有主机

[root@master ansible]# ansible all --list
  hosts (4):
    node1
    node2
    qq1.com
    192.168.50.10

  • 也可以指定范围

  • 定义主机的范围

[root@master ansible]# cat hosts 
node1
node2
qq1.com
192.168.50.10
192.168.50.[11:15]

# 定义了11到15这个ip地址
[root@master ansible]# ansible all --list
  hosts (9):
    node1
    node2
    qq1.com
    192.168.50.10
    192.168.50.11
    192.168.50.12
    192.168.50.13
    192.168.50.14
    192.168.50.15


2、主机组的定义

  • 主机组就是管理多个主机 [组名]即可

[root@master ansible]# cat hosts 
node1
node2
[webserver]
n1
n2

# 列出的时候,还是列出的主机
[root@master ansible]# ansible all --list
  hosts (4):
    node1
    node2
    n1
    n2

  • 问题
# 定义了一个n8的主机,但是了还是属于这个webserevr这个组
[root@master ansible]# cat hosts 
node1
node2
[webserver]
n1
n2


n8
[root@master ansible]# ansible webserver --list
  hosts (3):
    n1
    n2
    n8


# 如果不想属于这个组的话的,就需要写在最前面

[root@master ansible]# cat hosts 
n8
node1
node2
[webserver]
n1
n2


[root@master ansible]# ansible webserver --list
  hosts (2):
    n1
    n2

3、主机组的嵌套

  • 就是你管理2个机房的服务器,通过定义一个大的组,这个大的组里面有2个小组,来进行管理

  • 在组的后面添加这个children即可

[root@master ansible]# cat hosts 
[webserver]
n1
n2
[sqlserver]
n3
n4
[machine:children]
webserver
sqlserver
[root@master ansible]# ansible machine --list
  hosts (4):
    n1
    n2
    n3
    n4

4.查看主机和主机组的主机

# 查看这个主机组
[root@master ansible]# ansible webserver --list
  hosts (2):
    n1
    n2

# 查看不包含在主机组的主机
[root@master ansible]# ansible ungrouped --list
[WARNING]: No hosts matched, nothing to do

  hosts (0):


5、通配符查询和正则查询

# n* 查看以n开头主机
[root@master ansible]# ansible n* --list
  hosts (4):
    n1
    n2
    n3
    n4

  • 正则查询

  • "-^(e|t)" ,必须前面要有~就表示是正则匹配

  • 取反的操作也可以的


二、配置文件优先级

  • 最高的就是一个环境变量

  • 当前目录的配置文件

  • 用户家目录下的.ansible.cfg这个配置文件

  • /etc/ansible/ansible.cfg

  • 流程就是先去找环境变量,有的话就输出,没有的话就去找当前目录的ansible.cfg这个配置文件,然后再去找用户家目录下面的.ansible.cfg,再去找etc目录下面的配置文件

二、基本配置文件详解

1、配置文件段

  • 一共10个配置项

[defaults] 通用的配置项

[inventory]与主机清单相关配置

[privilege_escalation] 特权升级的相关配置

[paramiko_connection] 之前老的连接的相关配置

[ssh_connection] 使用openssh连接的相关配置

[persistent_connection] 持久化的相关配置

[accelerate] 加速模式相关配置

[selinux]selinux相关配置

[color]ansible命令输出的颜色相关的配置

[diff]是否再运行时,打印diff,也就是前后变更的差异

2、详细的参数

[root@master ansible]# cat ansible.cfg 
[defaults]
inventory = /etc/ansible/hosts  # 定义主机清单的文件路径

ask_sudo_pass=false  # 使用sudo提权的时候不需要输入密码

ask_pass=false   # 使用密钥进行连接,true的话就是使用密码进行连接

remote_user=devops  # 在被控节点上面使用devops用户进行管理

deprecation_warnings=False  # 警告关闭

host_key_checking=no  # 不需要主机验证,也就是不需要ssh提前连接,不需要有known_hosts中提前有被控节点的信息

log_path = /var/log/ansible.log # 指定一个存储ansible日志文件,默认是不记录日志的

# 提权的配置
[privilege_escalation]
become=true  # 是否开启提权
become_method=sudo  # 提权的方式是什么,使用sudo
become_user=root  # 提权到的用户是哪一个,是root用户
become_ask_pass=false  # 提权的时候不输入密码

三、配置一个普通用户管理被控节点过程

  • 首先就是三个节点,一个主控节点,2个被控节点

  • 首先就是在三个节点上面创建devops用户,然后就是进行提权的操作(相等于是root用户的操作)

  • 然后做好一个免密的登录,就是主控节点能够免密登录到2个被控节点上面去

然后就是ansible.cfg相关的配置了

1、创建一个devops用户并且提权和安装ansible

# 在主控节点上面创建devops用户和提权
useradd devops
echo 123  | passwd --stdin devops

# 修改提权文件
vim /etc/sudoers

# 配置不需要密码就能免密登录了
devops ALL=(ALL)        NOPASSWD:ALL

# pip安装ansible
pip install ansible -i https://pypi.tuna.tsinghua.edu.cn/simple

# 在被控节点上面创建devops用户
[root@master ansible]# ansible all -m shell -a "useradd devops && echo 123 | passwd --stdin devops" -u root -k 
SSH password: 
node1 | CHANGED | rc=0 >>
Changing password for user devops.
passwd: all authentication tokens updated successfully.

node2 | CHANGED | rc=0 >>
Changing password for user devops.
passwd: all authentication tokens updated successfully.


# 给被控节点提权
[root@master ansible]# ansible all -m shell -a "echo 'devops ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers " -u root -k 
SSH password: 
node1 | CHANGED | rc=0 >>


node2 | CHANGED | rc=0 >>


# 上面都是使用的ansible来直接进行操作的,如果使用的命令的就需要敲很多遍,因此的话,这种方式是非常的方便的

1、验证devops用户是否有root权限

[devops@node1 ~]$ sudo -l
Matching Defaults entries for devops on node1:
    !visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin,
    env_reset, env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User devops may run the following commands on node1:
    (ALL) NOPASSWD: ALL

2、主控节点能够免密登录到被控节点上面去

# 切换到deovps用户上
ssh-keygen

# 发送密钥给其他用户
ssh-copy-id devops@node1

ssh-copy-id devops@node2


3、编写ansible.cfg配置文件和hosts文件

  • 这个hosts文件提前写好了的
# 这些文件都是devops用户创建的,管理的

# 权限需要注意

[devops@master ansible]$ ll
total 8
-rw-r--r--. 1 devops devops 240 Sep  5 15:54 ansible.cfg
-rw-r--r--. 1 devops devops  19 Sep  5 15:53 hosts
[devops@master ansible]$ cat ansible.cfg 
[defaults]
inventory = ./hosts
ask_sudo_pass=false
ask_pass=false
remote_user=devops
deprecation_warnings=False
host_key_checking=no


[privilege_escalation]
become=true
become_method=sudo
become_user=root
become_ask_pass=false

[devops@master ansible]$ cat hosts 
[node]
node1
node2

4、验证普通用户管理被控节点


[devops@master ansible]$ ansible all -m ping 
node1 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}
node2 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "ping": "pong"
}

四、ansible执行的过程

  • 首先加载自己的配置文件,默认是/etc/ansible/ansibe.cfg

  • 查找对应的主机配置文件,找到要执行的主机或者组

  • 加载自己对应的模块文件

  • 通过ansible将模块或者命令生成对应的临时py文件(也就是python脚本),并且将这个文件传输到远程服务器

  • 对应执行用户的家目录的.ansible/tmp/xxx/xxx.py文件

  • 给文件执行x权限

  • 执行并返回结果

  • 删除临时py文件

posted @ 2025-09-05 16:26  乔的港口  阅读(15)  评论(0)    收藏  举报