Ansible:许可被拒绝

时间:2016-02-09 12:36:20

标签: ssh ansible ansible-playbook

我无法使用公钥身份验证运行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执行这个剧本,下一个剧本执行不需要密码,工作正常。但几分钟后它没有!为什么?上面的剧本实际上在做什么?

提前致谢。

1 个答案:

答案 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