了解linux的ansible 的使用

本章主要介绍在RHEL8中如何安装ansible 及 ansible 的基本使用。

  • ansible是如何工作的
  • 在 RHEL8中安装ansible
  • 编写ansible.cfg和清单文件
  • ansible 的基本用法

如果管理的服务器很多,如几十台甚至几百台,那么就需要一个自动化管理工具了,
ansible就是这样的一种自动化管理工具。
ansible是通过ssh连接到被管理主机,然后执行相关操作的,如图28-1所示。

ansible主机通过ssh连接到被管理主机时,需要提前设置密钥登录,使得从ansible主机
可以无密码登录到被管理主机。
本实验的拓扑图如图28-2所示。

这里server是 ansible主机,以lduan用户登录。server2和server3是被管理主机,在这两
台主机上创建lduan 用户并配置好sudo,使得这两台主机上的lduan用户通过sudo-i可以无
密码切换到root,下面开始配置。

复制代码
[root@pp ~]# yum -y install https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
[root@pp ~]# sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' /etc/yum.repos.d/epel*
[root@server ~]# sed -i 's|^metalink|#metalink|' /etc/yum.repos.d/epel*

先安装系统的开发工具
步骤1、挂载镜像
操作:略
配置本地yum源
操作:略
安装开发工具

复制代码
1 [root@pp ~]# yum ‐y groupinstall 开发工具

RHEL8默认的Python版本为3.6,不符合项目的需求。现在升级到3.9

下载Python3.9.5

复制代码
1 wget https://www.python.org/ftp/python/3.9.5/Python‐3.9.5.tgz
2 tar zxvf Python‐3.9.5.tgz

安装必须的包

复制代码
1 dnf ‐y install gcc zlib* libffi‐devel

安装Python

复制代码
1 cd Python‐3.9.5/
2 ./configure ‐‐prefix=/usr/local/python3 ‐‐enable‐optimizations
3 make
4 make install

删除原先的Python3和pip3

复制代码
1 rm ‐rf /usr/bin/python3
2 ln ‐s /usr/local/python3/bin/python3 /usr/bin/python3
3 rm ‐rf /usr/bin/pip3
4 ln ‐s /usr/local/python3/bin/pip3 /usr/bin/pip3

#查看Python3和Pip3是否正确的被安装:

复制代码
1 python3 ‐‐version
2 pip3 ‐‐version

第二步安装ansible

复制代码
1 rpm ‐ivh http://47.108.86.156/rhel8/ansible29/ansible‐2.9‐for‐rhel‐8‐x
86_64‐rpms/Packages/a/ansible‐2.9.11‐1.el8ae.noarch.rpm

警告:/var/tmp/rpm-tmp.uk5jjC: 头V3 RSA/SHA256 Signature, 密钥 ID fd431d51:
NOKEY
错误:依赖检测失败:
python3-cryptography 被 ansible-2.9.11-1.el8ae.noarch 需要
python3-jinja2 被 ansible-2.9.11-1.el8ae.noarch 需要
sshpass 被 ansible-2.9.11-1.el8ae.noarch 需要
需要解决依赖包问题
前面两个使用本地yum源就可以解决了
sshpass使用一个新的yum源

复制代码
[root@pp ~]# cat /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=http://47.108.86.156/rhel8/ansible29/ansible‐2.9‐for‐rhel‐8‐x8
6_64‐rpms/
gpgcheck=0

安装以上依赖

复制代码
yum ‐y install python3‐cryptography
yum ‐y install python3‐jinja2

配置sshpass软件yum源

复制代码
[root@pp ~]# cat /etc/yum.repos.d/ansible.repo
[ansible]
name=ansible
baseurl=http://47.108.86.156/rhel8/ansible29/ansible‐2.9‐for‐rhel‐8‐x8
6_64‐rpms/
gpgcheck=0
[root@pp ~]#

再次安装ansible

复制代码
[root@pp ~]# rpm ‐ivh
http://47.108.86.156/rhel8/ansible29/ansible‐2.9‐for‐rhel‐8‐x86_64‐rpms/P
ackages/a/ansible‐2.9.11‐1.el8ae.noarch.rpm

使用命令检查ansible的安装结果

复制代码
ansible ‐‐version
pip3 ‐‐version

这里安装的ansible的版本是2.9.27,同时也显示ansible的默认配置是
letc/ansible/ansible.cfgo还要确保ansible主机能够解析所有的被管理机器,这里通过配
置/etc/hosts 来实现,l/etchosts的内容如下。

复制代码
[root@pp ~]# cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.248.45 pp.rhce.cc pp
192.168.248.23 up.rhce.cc up
192.168.248.lp lp.rhce.cc lp
[root@pp ~]# 

在up和lp两台机器上确认已经创建好了blab 用户,如果没有请自行创建,然
后配置好sudo,命令如下。

复制代码
[root@up ~]# cat /etc/sudoers.d/blab
blab ALL=(root) NOPASSWD: ALL
[root@up ~]# 

[root@lp ~]# cat /etc/sudoers.d/blab
blab ALL=(root) NOPASSWD: ALL
[root@lp ~]# 

这样在这两台机器上,blab 用户通过sudo-i可以无密码切换到root用户。
使用blab 用户登录server,配置好ssh密钥登录,使得blab 用户可以无密码登录到
up和 lp,命令如下。

复制代码
[root@pp ~]# ssh up
The authenticity of host 'up (192.168.248.23)' can't be established.
ECDSA key fingerprint is SHA256:m8du5O4O5MZFdMmtcJYat7m78cwewV63nN8DJBE0UI4.

This system is not registered to Red Hat Insights. See https://cloud.redhat.com/
To register this system, run: insights-client --register

Last login: Fri Dec 15 10:04:18 2023 from 192.168.248.1
[root@up ~]# 
[root@up ~]# 
[root@up ~]# 

28.2 编写ansible.cfg和清单文件
执行ansible或ansible-playbook命令时,优先使用当前目录中ansible.cfg的配置。如果
当前目录中没有,则使用默认的/etc/ansible.cfg中的配置。
下面的操作都是server上的blab用户操作的,先在家目录下创建ansible.cfg,内容如下。

复制代码
[root@pp ~]# cat ansible.cfg 
[defaults]
inventory = ./hosts

[privilege_escalation]
become=True
become_method=sudo
become_user=root
[root@pp ~]# 

这里在[defaults]字段下只添加了一句inventory = ./hosts,表示把当前目录下名称为
hosts的文件当作清单文件(什么是清单文件马上就要讲到)。
在 [privilege_escalation]字段下定义了如何提升权限,因为是使用lduan用户登录到被管
理主机的,所以需要提升权限。这个字段下写了3条,分别如下。
(1)become=True:登录到被管理主机时要切换到其他用户。
(2)become_method=sudo:以 sudo的方式切换。
(3)become_user-root :切换到root用户。
这三句的意思是,当用ssh登录到被管理主机时,以 sudo的方式切换到root,这也是为
什么一开始要在被管理主机上配置好sudo的原因。
所有的被管理机器都要写入清单文件中。在实验环境中有两台被管理主机,那么分别写在
hosts中,内容如下。

复制代码
[blab@pp ~]$ cat hosts
up
lp
[blab@pp ~]$ 

这里一行一台主机,我们在使用ansible或ansible-playbook命令时,指定的主机名必须
是这个名称才行。要确保能解析server2和server3,写成相应的IP也可以。
如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法。

复制代码
[blab@pp ~]$ cat hosts 
up
lp
server[10:15]
[blab@pp ~]$ 

这里加了一行server[10:15],表示 server10到 server15,这样在清单文件中就写了8台主
机(需要注意的是,在我们的练习环境中server10到server15不存在)。
如果在执行ansible命令时只是想在部分主机上执行,那么在清单文件中可以对主机进行
分组。定义主机组时,组名写在中括号"[]"中,在[下面写的主机名都属于这个组,直到定
义下一个组的位置为止。修改清单文件的内容如下。

复制代码
[blab@pp ~]$ cat hosts 
up
lp
server[10:15]

[db1]
server[2:5]

[db2]
server6
server7
[blab@pp ~]$ 

这里一行一台主机,我们在使用ansible或ansible-playbook命令时,指定的主机名必须
是这个名称才行。要确保能解析server2和server3,写成相应的IP也可以。
如果环境中被管理的主机很多,把主机一台台地写进去太冗繁,所以可以改成如下写法。

复制代码
[blab@pp ~]$ cat hosts 
up
lp
server[10:15]

[blab@pp ~]$ 

这里加了一行server[10:15],表示 server10到 server15,这样在清单文件中就写了8台主
机(需要注意的是,在我们的练习环境中server10到server15不存在)。
如果在执行ansible命令时只是想在部分主机上执行,那么在清单文件中可以对主机进行
分组。定义主机组时,组名写在中括号"[]"中,在[下面写的主机名都属于这个组,直到定
义下一个组的位置为止。修改清单文件的内容如下。

复制代码
[blab@pp ~]$ cat hosts 
up
lp
server[10:15]

[db1]
server[2:5]

[db2]
server6
server7
[blab@pp ~]$ 

这里定义了两个主机组db1和db2,db1组中包括的主机有server2到server5,db2组中包
括的主机有server6和 server7。
下面查看每个主机组中有多少主机。首先查看主机组db1中的主机,命令如下

复制代码
[blab@pp ~]$ ansible db1 --list-hosts
  hosts (4):
    server2
    server3
    server4
    server5
[blab@pp ~]$ 

28.3 ansible的基本用法
ansible的基本用法如下。

复制代码
1 ansible 机器名 ‐m 模块× ‐a "模块的参数"

这里的机器名必须出现在清单文件中,整体的意思是在指定的机器上执行模块x。例如,在
up上执行hostname命令。然后就可以看到了

相关推荐
风清再凯3 小时前
自动化工具ansible,以及playbook剧本
运维·自动化·ansible
IT乌鸦坐飞机3 小时前
ansible部署数据库服务随机启动并创建用户和设置用户有完全权限
数据库·ansible·centos7
遇见火星13 天前
如何使用Ansible一键部署MinIO集群?
ansible
粥周粥13 天前
ANSIBLE
ansible
码农101号13 天前
Linux中ansible模块补充和playbook讲解
linux·运维·ansible
码农101号13 天前
Linux的Ansible软件基础使用讲解和ssh远程连接
ansible
烟雨书信14 天前
ANSIBLE运维自动化管理端部署
运维·自动化·ansible
碎碎-li14 天前
ANSIBLE(运维自动化)
运维·自动化·ansible
@donshu@18 天前
Linux运维-ansible-python开发-获取inventroy信息
linux·运维·ansible
Kendra91921 天前
Ansible
ansible