Ansible:权限被拒绝(公钥、密码)

5
我无法连接到Ansible中的主机,出现以下错误:

192.168.1.12 | 无法访问! => { "changed": false, "msg": "错误!SSH在连接期间遇到未知错误。我们建议您重新运行命令,使用-vvvv,这将启用SSH调试输出以帮助诊断问题", "unreachable": true }

这是我的hosts文件:
[test]
192.168.1.12

这是临时指令:

ansible all -m ping

我能够通过原始ssh连接。


需要更多的信息,包括ansible版本和环境,你使用什么作为虚拟化管理器?VirtualBox?Vagrant?目前看起来像是一个网络问题,请发送ansible all -m ping -vvv的结果。 - Raul Hugo
1
你的问题标题显示“Permission denied (publickey, password)”,但你引用的实际错误信息完全不同。你真正遇到的问题是什么? - Kenster
@Kenster 当我使用-vvvv选项执行命令时,会出现该错误。 - Héctor
5个回答

9

默认情况下,Ansible尝试使用SSH密钥。看起来你的密钥有误。尝试使用密码认证。

ansible all -m ping --ask-pass --ask-sudo-pass

希望这可以帮到你。


1
谢谢。它有效。你知道如何正确设置SSH密钥吗? - Héctor
我有同样的问题。而且用这个提示,我无法解决它。 $ ansible -i hosts.txt all -m ping --ask-pass --ask-sudo-pass [DEPRECATION WARNING]: sudo 命令行选项已被弃用,建议使用 "become" 命令行参数。此功能将在版本 2.9 中删除... SSH 密码: SUDO 密码[默认为 SSH 密码]: 11.0.0.108 | 不可达! => { "changed": false, "msg": "Invalid/incorrect password: Permission denied, please try again.", "unreachable": true } - Fabrício Pereira

8

@bigdestroyer,要设置SSH公钥,请使用此playbook

- hosts: all
  remote_user: root
  vars:
    authorized_key_list:
      - name: root
        authorized_keys:
         - key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
           state: present
  roles:
    - { role: GROG.authorized-key }

使用--ask-pass参数执行此playbook,因为您将使用它来设置公钥身份验证。

ansible-playbook setup_ssh.yml --ask-pass

此角色将把当前用户的公钥添加到远程主机的authorized_keys文件中。

注意

ask-pass仅在每次运行时工作一次,因此这仅适用于具有相同密码的主机。

我通常使用-limit并分批在具有相同密码的主机上执行。

例如,假设host1、host2和host3的密码为foo,host4和host5为bar

ansible-playbook setup-ssh.yml --ask-pass -l host1,host2,host3

提供密码foo

ansible-playbook setup-ssh.yml --ask-pass -l host4,host5

提供密码bar

然后

ansible -m ping host1,host2,host3,host4,host5

您可以在此处阅读角色文档。


当我按照您上面所说的做时,出现以下错误:错误!在/home/osboxes/roles:/home/osboxes:/etc/ansible/roles中未找到角色“GROG.authorized-key”。错误似乎出现在“/home/osboxes/setup_ssh.yml”中:第10行,第7列,但根据确切的语法问题,可能会出现在文件的其他位置。有问题的行似乎是: roles: - { role: GROG.authorized-key } ^ 在这里 - Yogesh D
1
@Techiee,你安装了这个角色吗?如果没有,请输入:ansible-galaxy install GROG.authorized-key - Bernardo Vale
看起来你正在运行的Ansible机器不符合Python要求。你正在执行哪个版本的Python?python -V - Bernardo Vale
让我们在聊天中继续讨论:http://chat.stackoverflow.com/rooms/125016/discussion-between-techiee-and-bernardo-vale。 - Yogesh D
只需执行 ansible-galaxy install GROG.authorized-key 安装即可。请重新检查 Ansible 的安装过程,确保满足所有要求! - Bernardo Vale
显示剩余4条评论

2

对于使用 Ansible 2.6 的用户,--ask-sudo-pass 已经被弃用。正确的语法是:

ansible all -m ping --ask-pass --ask-become-pass

1

我通过添加--ask-pass参数来解决了这个问题。


1
我遇到了这个问题 - 我的ssh密钥没有正确设置。我使用以下方法解决了这个问题:
  • 确保每台机器都设置了ssh密钥,使用ssh-keygen命令。

    ssh-keygen

  • 使用ssh-copy-id命令将您的公钥传输到机器上。

    ssh-copy-id -i <id_rsa.pub文件位置> <主机IP地址>

这有助于解决我的错误,希望对你也有帮助!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接