( 1 )控制节点( master ): linux , unix
需要的软件包: ansible , python3 ( python3.5+ )或者 python2 ( python2.7+ )
[class@master yum.repos.d] $ cat qinghua.repo
[base]
name = base
baseurl = https://mirrors.163.com/rocky/8.5/AppStream/x86_64/os/
gpgcheck = 0 注: epel 源不会写的话,参照 https://developer.aliyun.com/mirror/epel?spm=a2c6h.13651102.0.0.3
e221b11rjKSRs
( 2 )受控节点( node ): linux , windows , unix
需要的软件包: python3 ( python3.5+ )或者 python2 ( python2.7+ )
( 3 )写好当前局域网内主机的 hosts 文件
控制节点和受控节点都要写:
2 、 ansible 的基础环境配置
( 1 )控制节点:添加一个普通用户去使用 ansible
[app]
name = app
baseurl = https://mirrors.163.com/rocky/8.5/BaseOS/x86_64/os/
gpgcheck = 0
[class@master yum.repos.d] $ cat epel-qinghua.repo
[epel]
name = epel
baseurl = https://mirrors.tuna.tsinghua.edu.cn/epel/8/Everything/x86_64/
gpgcheck = 0
[class@master ~] $ sudo yum install ansible python3 -y
安装成功后可使用如下命令查看安装软件的版本号
[class@master ~] $ ansible --version
ansible 2 .9.27
config file = /home/class/ansible.cfg
configured module search path = [ '/home/class/.ansible/plugins/modules' ,
'/usr/share/ansible/plugins/modules' ]
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3 .6.8 (default, Nov 9 2021 , 14 :44:26) [GCC 8 .5.0 20210514
(Red Hat 8 .5.0-3)]
[root@node12 ~] # cd /etc/yum.repos.d/
[root@node12 yum.repos.d] # ll
total 4
-rw-r--r-- . 1 root root 93 Feb 17 16 :29 qinghua.repo
[root@node12 yum.repos.d] # cat qinghua.repo
[base]
name = base
baseurl = https://mirrors.163.com/centos-vault/7.8.2003/os/x86_64/
gpgcheck = 0
[root@node12 yum.repos.d] # yum install python -y
[class@master ~] $ cat /etc/hosts
192 .168.168.11 master
192 .168.168.12 node12
192 .168.168.13 node13 ( 2 )受控节点:选取一个被控制节点远程连接的普通用户,配置该用户可以使用 sudo
( 3 )配置控制节点的 class 可以通过秘钥登录受控节点的 student 用户
方法 1 :
3 、 ansible 的清单和配置文件
( 1 )清单
默认生效的是 /etc/ansible/hosts ,文件内容使用 INI 样式书写 ;
也可以使用 ansible 命令行选项 - i 指定使用的清单文件;
[root@master ~] # useradd class
[root@master yum.repos.d] # useradd student
[root@master ~] # cat /etc/sudoers
class ALL = (ALL) NOPASSWD:ALL
student ALL = (ALL) NOPASSWD:ALL
[root@node12 yum.repos.d] # useradd student
[root@node12 ~] # cat /etc/sudoers
student ALL = (ALL) NOPASSWD:ALL
[root@master ~] # su - class
Last login: Thu Feb 17 21 :27:12 CST 2022 on pts/0
[class@master ~] $ ssh -keygen
[class@master ~] $ ssh -copy-id student@node12
[class@master ~] $ ssh -copy-id student@node13
[class@master ~] $ cat inventory
node12
node13
[webservers]
master
[dbservers]
node12
[servers:children]
webservers
dbservers
[class@master ~] $ ansible all -i inventory --list-hosts
hosts (3):
node13
master
node12
[class@master ~] $ ansible ungrouped -i inventory --list-hosts
hosts (1):
node13
[class@master ~] $ ansible webservers -i inventory --list-hosts
hosts (1):
master ( 2 ) ansible 的配置文件
[class@master ~] $ ll /etc/ansible/ansible.cfg
[class@master ~] $ ll ~/.ansible.cfg
[class@master ~] $ ll ./ansible.cfg
三个文件的生效优先顺序可以通过如下命令查看:
[class@master ~] $ ansible --version
ansible 2 .9.27
config file = /home/class/ansible.cfg
configured module search path = [ '/home/class/.ansible/plugins/modules' ,
'/usr/share/ansible/plugins/modules' ]
ansible python module location = /usr/lib/python3.6/site-packages/ansible
executable location = /usr/bin/ansible
python version = 3 .6.8 (default, Nov 9 2021 , 14 :44:26) [GCC 8 .5.0 20210514
(Red Hat 8 .5.0-3)]
实验:
[class@master ~] $ mkdir test1/
[class@master test1] $ cat
ansible.cfg inventory
[class@master test1] $ cat ansible.cfg
[defaults]
inventory = ./inventory # 指定清单文件
remote_user = student # 指定连接受控主机的 student 用户
ask_pass = false # 远程登录受控主机时要求不输入密码,所以要优先配置 ssh 的密钥登
录
[privilege_escalation]
become = True # 登录到受控主机后是否变为其他用户
become_method = sudo # 可以使用 su 或者 sudo 的方式变为其他用户,当前使用 sudo 方式,默
认是 sudo
become_user = root #sudo 到哪个用户
become_ask_pass = False #sudo 是否输入密码
注:受控节点需要提前设置普通用户的 sudo 配置
[class@master test1] $ cat inventory
node12
node13
master
[class@master test1] $ ansible all -m ping
node13 | SUCCESS = > {
"ansible_facts" : {
"discovered_interpreter_python" : "/usr/libexec/platform-python"
},
"changed" : false ,
"ping" : "pong"
}
node12 | SUCCESS = > {
"ansible_facts" : {
"discovered_interpreter_python" : "/usr/bin/python"
},
"changed" : false ,
"ping" : "pong"
}
master | SUCCESS = > {
"ansible_facts" : { "discovered_interpreter_python" : "/usr/libexec/platform-python"
},
"changed" : false ,
"ping" : "pong"
}
[class@master test1] $ ansible --help
[class@master test1] $ man ansible