我无法使用公钥身份验证运行Playbook。我收到这个错误:
尝试私钥:/root/.ssh/id_dsa\r\ndebug3:没有这样的身份: /root/.ssh/id_dsa:没有这样的文件或目录\ r \ n \ ndebug1:尝试私有 key:/root/.ssh/id_ecdsa\r\ndebug3:没有这样的身份: /root/.ssh/id_ecdsa:没有这样的文件或目录\ r \ n \ ndebug1:正在尝试 私钥:/root/.ssh/id_ed25519\r\ndebug3:没有这样的身份: /root/.ssh/id_ed25519:没有这样的文件或目录\ r \ n \ ndebug2:我们没有 发送数据包,禁用方法\ r \ n \ ndebug1:不再进行身份验证 尝试的方法。\ r \ n许可拒绝(公钥,密码)
直到现在,我一直在使用--ask-pass
身份验证,但现在我需要自动化它,所以我需要通过公钥来完成。我如何配置它?
我找到了这本剧本:
---
- hosts: all
remote_user: root
vars:
authorized_key_list:
- name: root
authorized_keys:
- key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
state: present
我用--ask-pass
执行这个剧本,下一个剧本执行不需要密码,工作正常。但几分钟后它没有!为什么?上面的剧本实际上在做什么?
提前致谢。
答案 0 :(得分:3)
假设您有2台机器。机器A {Ansible Host}&机器B {目标}
在机器A上,您必须使用以下命令生成一个sshkey:
~$ ssh-keygen
这将在当前用户的.ssh目录中生成公钥和私钥对。
生成密钥后,您需要从计算机A的.ssh目录中复制公钥{extension .pub}。
现在登录到机器B,然后进入它的.ssh文件夹。现在您需要创建一个名为" authorized_keys
"的文件。 (如果不存在,请确保权限是只读的)并将复制的公钥从计算机A粘贴到计算机B.
已完成。
现在在机器A上的主机{inventory}文件中使用以下格式:
[hosts]
Machine_B_ip ansible_ssh_user=username_here ansible_ssh_private_key_file=/path_of_private_key
前:
[log_export]
12.6.1.23 ansible_ssh_user=ubuntu ansible_ssh_private_key_file=/home/nsingh/dev.pem
你也可以做一个ansible ping来检查Ansible是否能够通过ssh进行通信ansible all -m ping -vi inventory_file