使用密码(而不是密码)管理节点
时间: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来执行任何临时命令或者剧本,而无需密码。