Ansible系列(2):Ansible环境搭建并执行第一条ad-hoc命令

这是Ansible系列课程第二节,Ansible环境搭建。介绍Ansible在不同的平台上的安装方式,配置SSH Key打通与其他主机的连接,并执行第一条ad-hoc命令验证ansible是否正常。

该系列课程前后章节都是有关联性的,对于初学者建议按顺序阅读。也可以选择特定的章节了解单个知识点。

在上一节介绍了Ansible与其他配置管理工具非常的不同。它的设计思路使得Ansible不仅使用简单,而且安装也非常简单。它不需要为此准备额外的配置文件和客户端即可使用。Ansible将机器分为控制节点管理节点。我们只需要在控制节点上安装Ansible,并且在控制节点上执行ad-hoc命令或者执行playbook,以此完成对其他管理节点的配置和操作。

1、基础环境要求

该系列教程所用到的环境为:

两台云主机:101.34.150.237(控制节点),118.195.199.238(管理节点)

操作系统:CentOS 7.6 64位

Python版本: 2.7.5

Ansible版本:2.9.25

Git版本:2.33.0

IDE版本:IntelliJ IDEA Ultimate 2019.3.2

代码托管平台:码云

Ansible目前支持Linux和MacOS作为控制节点,管理节点可以是Linux、MacOS、其他类Unix系统和Windows。Ansible对控制节点的配置没有太多要求,对管理节点的要求就更低了。但Ansible的运行也不是一点要求也没有,还是需要具备执行Ansible所必须的基础条件:Python 2.6或更高版本,OpenSSH

这两个程序在目前的大多数操作系统上都已经安装好了,我们可以检查一下是否安装。下面是在本环境中通过查看版本号检查是否安装的命令。

检查Python的版本:

[root@controll-node ~]# python -V

Python2.7.5

检查OpenSSH是否安装

[root@controll-node ~]# ssh -V

OpenSSH_7.4p1, OpenSSL1.0.2k-fips26Jan2017

如果没有安装可以通过包管理器进行安装。

#安装python2

[root@controll-node ~]#yum install python2 -y

#安装OpenSSH

[root@controll-node ~]#yum install openssh -y

Git主要用于从代码库中下载和更新Ansible脚本。当然,你也可以直接在服务器上编辑,执行,但这里不建议这么做。Ansible采用的是基础设施即代码的理念,应该用管理代码的方式去管理Ansible的脚本,这样才能享受版本控制带来的好处。

关于Git的安装可以利用包管理器直接安装,只不过安装的Git版本较低,命令如下:

[root@controll-node ~]#yum install git -y

其他更多工具的安装部署可以到“幂次平台”中查看。

2、Ansible的安装

前面章节提到,Ansible的安装非常简单并且只需要在控制节点安装。下面我们介绍如何在控制节点安装Ansible,安装Ansible的方法有很多,可以通过Linux的包管理器直接安装,也可以通过源码的方式安装,还可以通过python的包管理工具pip进行安装,这几种方式都能完成Ansible的安装。下面我们分别介绍一下:

①Linux包管理器安装

包管理器能够自动的解决软件的依赖问题,使得安装软件非常的容易。只需要通过一条命令即可完成Ansible的安装,不同的操作系统安装命令也不一样。

CentOS、Fedora、REHL以及兼容版本:

[root@controll-node ~]#sudo yum install ansible

Ubuntu、Debian以及兼容版本:

[root@controll-node ~]#sudo apt-get install ansible

②源码方式安装

这是安装Ansible最新版本的最佳方法,甚至可以提前尝鲜未发布的新特性,但同时也可能是一个未完全测试通过,还带有bug的版本。这种方式就需要克隆Git源码库,然后进行安装,命令如下:

[root@controll-node ~]#git clone https://github.com/ansible/ansible.git

[root@controll-node ~]#cd ansible

[root@controll-node ~]#sudo make install

③pip包管理器安装

pip是Python的包管理器,提供了对Python包的查找、下载和安装功能。对于Python2.7.9+和Python3.4+以上的版本都自带了pip工具。

如果没有安装pip可以通过下面的命令进行安装:

[root@controll-node ~]#yum install python2-pip

[root@controll-node ~]#yum install python3-pip

然后使用pip安装ansible

[root@controll-node ~]#pip install ansible

3、检查安装结果

Ansible安装完后,通过查看Ansible版本号检查安装是否成功。

[root@controll-node ~]# ansible --version

ansible2.9.25

config file=/etc/ansible/ansible.cfg

configured module search path=[u'/root/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']

ansible python module location=/usr/lib/python2.7/site-packages/ansible

executable location=/usr/bin/ansible

python version=2.7.5 (default, Apr22020,13:16:51) [GCC4.8.520150623(Red Hat4.8.5-39)]

4、配置SSH KEY

Ansible的控制节点是通过SSH远程连接管理节点并执行具体的任务。虽然Ansible也支持密码的方式,但每次都传入密码,不易将任务自动化,如果写到脚本里,特别是root的密码也是不安全的。因此,我们可以通过SSH KEY的方式建立控制节点和管理节点的连接。通过以下几个步骤:

STEP1:在控制节点通过下面命令生成SSH KEY:

[root@controll-node ~]# ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter fileinwhich to save the key (/root/.ssh/id_rsa):

Enter passphrase (emptyforno passphrase):

Enter same passphrase again:

Your identification has been savedin/root/.ssh/id_rsa.

Your public key has been savedin/root/.ssh/id_rsa.pub.

The key fingerprint is:

SHA256:HF83TTg5MnLX7aokggM6PlJhlx/rdJt0UT4X7MEzmgA root@controll-node

The key's randomart image is:

+---[RSA2048]----+

|        E.   o+o|

|          o=&oo|

|     .  .  *.BoO.|

|  o+.. o..=.o..|

| .+o+S .. o . |

|+*+o . .  |

| o . o+=o .   |

|. o   . o   .    |

| . .             |

+----[SHA256]-----+

STEP2:将控制节点的公钥添加的管理节点的authorized_keys文件中,这样每次就不需要再次输入密码 了,可以采用如下命令添加。

[root@controll-node ~]# ssh-copy-id [email protected]

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed:"/root/.ssh/id_rsa.pub"

/usr/bin/ssh-copy-id: INFO: attempting to loginwith the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO:1key(s) remain to be installed--ifyou are prompted now it is to install the new keys

[email protected]'s password:

Number of key(s) added:1

Now try logging into the machine, with:"ssh '[email protected]'"

and check tomakesure that only the key(s) you wanted were added.

STEP3:验证SSH连通性,可以看出不需要输入密码,控制节点通过SSH连接到管理节点。

[root@controll-node ~]# ssh [email protected]

Last login: Sun Sep1219:29:542021from223.72.41.238

[root@manage-node ~]#

可能出现的问题及解决方案:

1、在通过ssh-copy-id进行SSH KEY授权时,出现Permission denied(publickey,gssapi-keyex,gssapi-with-mic)问题。

解决:如果出现这个问题,可以修改管理节点下的/etc/ssh/sshd_config这个文件,检查并开启下面的配置:

PermitRootLogin yes

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

PasswordAuthentication yes

修改完后保存该文件,重启sshd服务,再次重试OK了。

[root@manage-node ~]# systemctl restart sshd.service

5、执行第一条ad-hoc命令

到目前为止,通过Ansible控制其他主机的条件已经满足了,是时候小试牛刀执行一下Ansible命令了。注意:这一步不对Ansible的配置做过多的解释,后面章节都会讲到。下面分两步执行:

STEP1:因为初次执行Ansible,我们需要将管理节点添加到inventory文件中。默认的ansible inventory文件是/etc/ansible/hosts文件。在该文件的末尾添加如下内容,因为Ansible是从该文件读取需要连接的管理节点的。

[devops]

118.195.199.238

STEP2:在控制节点执行以下ad-hoc命令,该命令包含用于测试控制节点和管理节点联通性的ping模块。

[root@controll-node ~]# ansible devops -m ping

118.195.199.238 | SUCCESS=> {

"ansible_facts": {

"discovered_interpreter_python":"/usr/bin/python"

   },

"changed":false,

"ping":"pong"

}

该命令的执行结果是SUCCESS,说明Ansible的控制节点和管理节点是联通的,可以使用Ansible执行其他任务了。

6、总结

本文主要介绍Ansible的环境搭建,包含不同平台下安装Ansible的不同方法。Ansible安装完成后,配置SSH KEY并通过一条ad-hoc命令验证控制节点和管理节点的连接是正常的。既然环境都准备好了,那么接下来就进入到学习Ansible具体使用的章节了。


你可能感兴趣的:(Ansible系列(2):Ansible环境搭建并执行第一条ad-hoc命令)