【问题标题】:Ansible: Permission denied (publickey, password)Ansible:权限被拒绝(公钥,密码)
【发布时间】:2016-01-18 12:28:15
【问题描述】:

我无法连接到 Ansible 中的主机。这是错误:

192.168.1.12 |遥不可及! => { “改变”:错误, "msg": "ERROR!SSH 在连接过程中遇到未知错误。我们建议您使用 -vvvv 重新运行该命令,该命令 将启用 SSH 调试输出以帮助诊断问题", “无法到达”:真 }

这是我的hosts 文件:

[test]
192.168.1.12

这是临时指令:

ansible all -m ping

我可以通过原始ssh 进行连接。

【问题讨论】:

  • 是否需要更多信息、ansible 版本和环境,你使用什么作为管理程序?虚拟机? vagrant?,目前听起来像是网络问题,发送ansible all -m ping -vvv的结果?
  • 您的问题标题显示“权限被拒绝(公钥,密码)”,但您引用的实际错误却完全不同。你有什么实际问题?
  • @Kenster 当我使用 -vvvv 选项执行命令时出现错误

标签: ssh ansible


【解决方案1】:

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

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

希望对你有帮助。

【讨论】:

  • 谢谢。有用。你知道如何正确设置 ssh 密钥吗?
  • 我也有同样的问题。有了这个提示,我无法解决它。 $ ansible -i hosts.txt all -m ping --ask-pass --ask-sudo-pass [弃用警告]:sudo 命令行选项已被弃用,取而代之的是“成为”命令行参数。此功能将在 2.9 版中删除。 ... SSH 密码:SUDO 密码[默认为 SSH 密码]:11.0.0.108 |遥不可及! => { "changed": false, "msg": "无效/错误密码:权限被拒绝,请重试。", "unreachable": true }
【解决方案2】:

@bigdestroyer,设置 ssh 公钥使用这个剧本

- 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 执行此剧本,因为您将使用它来设置公钥身份验证。

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

您可以阅读角色文档here

【讨论】:

  • 当我按照您上面所说的进行操作时,出现以下错误:错误!在/home/osboxes/roles:/home/osboxes:/etc/ansible/roles 中找不到角色“GROG.authorized-key”错误似乎出现在“/home/osboxes/setup_ssh.yml”中:行10,第 7 列,但可能在文件中的其他位置,具体取决于确切的语法问题。违规行似乎是:rol​​es: - { role: GROG.authorized-key } ^ here
  • @Techiee,你安装了这个角色吗?如果不只是输入:ansible-galaxy install GROG.authorized-key.
  • [警告]:- GROG.authorized-key 未成功安装:无法从 API 服务器获取数据无法验证 Galaxy.ansible.com:443 的 SSL 证书。确保您的托管系统安装了有效的 CA 证书。如果提供 url 的网站使用 SNI,则您的托管计算机上需要 python >= 2.7.9,或者您可以安装 urllib3pyopensslndg-httpsclientpyasn1 python 模块以在 python 中执行 SNI 验证 > = 2.6。如果您不需要确认服务器身份,则可以使用 validate_certs=False 但这不安全且不
  • 看起来您正在运行 ansible 的机器与 python 要求不匹配。你正在执行什么版本的python? python -V
  • 我有 Python 2.7.6
【解决方案3】:

我遇到了这个问题 - 我的 ssh 密钥设置不正确。我使用以下方法解决了这个问题:

  • 使用 ssh-keygen 命令确保每台机器都设置了 ssh 密钥。

    ssh-keygen

  • 使用 ssh-copy-id 命令将您的公钥传递给机器。

    ssh-copy-id -i <location of id_rsa.pub> <ip-address of host>

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

【讨论】:

    【解决方案4】:

    对于那些运行 Ansible 2.6 的用户,--ask-sudo-pass 现在已弃用。正确的语法是:

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

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-09-11
        • 2019-12-16
        • 2017-09-07
        • 2018-04-12
        • 2021-11-11
        • 2021-07-12
        • 1970-01-01
        相关资源
        最近更新 更多