使用密码(而不是密码)管理节点

时间:2020-02-23 14:29:39  来源:igfitidea点击:

到目前为止,在所有示例中,我们都通过设置无密码的密码短语来使用无密码通信。

这样,"控制器"便能够与受管节点进行通信,而无需提示输入任何密码。

但这又不是严格的要求(尽管建议)。
我们还可以在控制器和受管节点之间使用基于密码的通信。
为了演示该示例,我删除了server3上" controller"节点的" authorized_keys"条目,因此现在无密码通信对" server3"不起作用。

我已经在所有节点上用服务器3的详细信息更新了/etc/hosts,该详细信息是使用我们的受管节点之一的AMI镜像创建的。

[ansible@controller ~]$cat /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
172.31.7.253    controller      controller.example.com
172.31.4.189    server1         server1.example.com
172.31.23.18    server2         server2.example.com
172.31.14.46    server3         server3.example.com

接下来,我们将更新我们的"清单(Inventory)"以包括此主机

[ansible@controller ~]$head -n 3 /etc/ansible/hosts
server1
server2
server3

现在,如果我尝试从控制器到server3进行纯SSH,它将提示我输入密码:

[ansible@controller ~]$ssh server3
ansible@server3's password:
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Mon Sep 21 07:46:47 2017
[ansible@server3 ~]$

因此,我们少密码的通信不再起作用。
现在让我们使用" ansible"对这个受管节点执行" ping"操作:

[ansible@controller ~]$ansible server3 -m ping
server3 | UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ansible@server3: Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).",
    "unreachable": true
}

因此ansible失败了,因为"默认情况下ansible不会提示输入任何密码",因此我们必须提供--ask-pass或者-k来输入提示信息。

[ansible@controller ~]$ansible server3 -m ping --ask-pass
SSH password:
server3 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    "ping": "pong"
}

现在,我们可以使用带有--ask-pass的ansible来执行任何临时命令或者剧本,而无需密码。