Ansible 的安装

Ansible 只需在管理端部署环境即可,建议读者采用 yum 源方式来实现部署,下面介绍具体步骤。

业务环境说明

为了方便读者理解,笔者通过虚拟化环境部署了两组业务功能服务器来进行演示。笔者的操作系统版本为 CentOS release 6.4,自带 Python 2.6.6。相关服务器信息如表 9-1 所示(CPU 核数及 Nginx 根目录的差异化是为方便演示生成动态配置需要):

image 2023 12 08 18 36 46 571
Figure 1. 表9-1 业务环境表

安装EPEL

由于目前 RHEL 官网的 yum 源还没有得到 Ansible 的安装包支持,因此先安装 EPEL 作为部署 Ansible 的默认 yum 源。

安装Ansible

主服务器安装(主控端),代码如下:

#yum install ansible -y

Ansible配置及测试

第一步是修改主机与组配置,文件位置 /etc/ansible/hosts,格式为 ini,添加两台主机 IP,同时定义两个 IP 到 webservers 组,更新的内容如下:

ansible/hosts
#green.example.com
#blue.example.com
192.168.1.21
192.168.1.22
[webservers]
#alpha.example.org
#beta.example.org
192.168.1.21
192.168.1.22

通过 ping 模块测试主机的连通性,分别对单主机及组进行 ping 操作,出现如图 9-2 所示的结果表示安装、测试成功。

image 2023 12 08 18 42 45 019
Figure 2. 图9-2 测试主机连通性

由于主控端与被控主机未配置 SSH 证书信任,需要在执行 ansible 命令时添加 -k 参数,要求提供 root(默认)账号密码,即在提示 “SSH password:” 时输入。很多人更倾向于使用 Linux 普通用户账户进行连接并使用 sudo 命令实现 root 权限,格式为:ansible webservers -m ping -u ansible -sudo。

配置Linux主机SSH无密码访问

为了避免 Ansible 下发指令时输入目标主机密码,通过证书签名达到 SSH 无密码是一个好的方案,推荐使用 ssh-keygen 与 ssh-copy-id 来实现快速证书的生成及公钥下发,其中 ssh-keygen 生成一对密钥,使用 ssh-copy-id 来下发生成的公钥。具体操作如下。

在主控端主机(SN2013-08-020)创建密钥,执行:ssh-keygen -t rsa,有询问直接按回车键即可,将在 /root/.ssh/ 下生成一对密钥,其中 id_rsa 为私钥,id_rsa.pub 为公钥(需要下发到被控主机用户 .ssh 目录,同时要求重命名成 authorized_keys 文件)。

Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):(回车)
Enter passphrase (empty for no passphrase):(回车)
Enter same passphrase again:(回车)
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
8d:f0:47:c6:b9:55:5b:c0:0e:04:ec:e2:9c:38:f6:84 root@SN2013-08-020
The key's randomart image is:
+--[ RSA 2048]----+
|          ..o..o..|
|          ......o |
|      .   .= .o.   |
|       o.=.o  .    |
|       =So+        |
|      E =.         |
|     . +           |
|         .         |
|                   |
+-----------------+

接下来同步公钥文件 id_rsa.pub 到目标主机,推荐使用 ssh-copy-id 公钥拷贝工具,命令格式:/usr/bin/ssh-copy-id [-i [identity_file]] [user@]machine。本示例中我们输入以下命令同步公钥至 192.168.1.21 和 192.168.1.22 主机。

#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.21
#ssh-copy-id -i /root/.ssh/id_rsa.pub root@192.168.1.22

校验 SSH 无密码配置是否成功,运行 ssh root@192.168.1.21,如直接进入目标 root 账号提示符,则说明配置成功。