如何在控制器和受管节点上配置Ansible
在本节中现在安装ansible之后,我们将设置Ansible环境并配置控制器和受管节点。
创建普通用户
这很重要,因为我们将使用此"用户"来执行所有与ansans相关的任务。为了这篇文章,我将创建一个用户ansible
[root@controller ~]# useradd ansible
为该用户分配密码
[root@controller ~]# passwd ansible
在受管节点上重复相同的操作,即在所有受管主机上创建相同的用户:
[root@server1 ~]# useradd ansible [root@server1 ~]# passwd ansible [root@server2 ~]# useradd ansible [root@server2 ~]# passwd ansible
配置少密码验证
我们将为从控制器到所有受管节点的ansible用户设置少用密码的身份验证。
这是为了确保控制器可以在没有任何密码提示的情况下连接到所有受管节点。
在控制器节点上以ansible用户身份登录,并使用ssh-keygen生成私钥。
在此示例中,我们使用-P""预定义了空白密码
此步骤将在~/.ssh
中创建私钥和公钥对。
[ansible@controller ~]$ls -al ~/.ssh/ total 20 drwx------ 2 ansible ansible 4096 Sep 19 13:17 . drwx------ 4 ansible ansible 4096 Jan 29 2017 .. -rw------- 1 ansible ansible 412 Jan 29 2017 authorized_keys -rw------- 1 ansible ansible 2622 Sep 19 13:17 id_rsa -rw-r--r-- 1 ansible ansible 584 Sep 19 13:17 id_rsa.pub
我们将使用ssh-copy-id将密钥复制到远程托管服务器,并将其添加到authorized_keys中。
[ansible@controller ~]$ssh-copy-id -i ~/.ssh/id_rsa.pub server1 [ansible@controller ~]$ssh-copy-id -i ~/.ssh/id_rsa.pub server2
不需要使用-i~/.ssh/id_rsa.pub,因为只有一个公共密钥文件,所以ssh-copy-id将自动选择它,但是为了简单起见,我添加了此参数。
减少密码验证SSH身份验证
ssh-copy-id命令将我们刚刚创建的公共密钥复制到server1和server2并将密钥的内容添加到~/.ssh下的ansible用户的authorized_keys文件中。
将公钥复制到受管节点后,我们可以尝试以" ansible"用户身份执行ssh并确保未收到任何密码提示
[ansible@controller ~]$ssh server1 [ansible@controller ~]$ssh server2
使用sudo配置特权升级
由于我们的ansible
用户需要特权升级,因此我们将在/etc/sudoers.d'下使用新文件为
ansible`用户创建一条新规则。
[root@controller ~]# cat /etc/sudoers.d/ansible ansible ALL=(ALL) NOPASSWD: ALL
在所有托管主机上添加相同规则
[root@server1 ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ansible [root@server2 ~]# echo "ansible ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers.d/ansible
验证连接是否畅通
接下来,我们需要确保我们的控制器能够通信所有受管节点。为此,我们需要一个列表文件。由于我们已经使用软件包管理器安装了ansible,因此我们将在/etc/ansible
下拥有默认的ansible配置文件。
[root@controller ~]# ls -l /etc/ansible/ total 28 -rw-r--r-- 1 root root 19985 Sep 4 04:01 ansible.cfg -rw-r--r-- 1 root root 1016 Sep 4 04:01 hosts drwxr-xr-x 2 root root 4096 Sep 4 04:01 roles
其中以root用户身份在/etc/ansible/hosts文件中添加受管节点的主机名或者IP地址。
[root@controller ~]# head -n 2 /etc/ansible/hosts server1 server2
接下来,尝试通过使用" ansible all -m ping"命令以" ansible"用户身份使用控制器节点" ping"受管节点:
注意" ping":" pong",这意味着我们的控制器节点能够使用/usr/libexec/platform-python作为解释器与受管节点进行通信。