【问题标题】:Ansible Permission denied (public key) but ssh using same key worksAnsible Permission denied (public key) 但使用相同密钥的 ssh 有效
【发布时间】:2017-04-12 06:50:57
【问题描述】:

我在 Ubuntu 16.x(ansible 版本 2.2.1.0 和 2.2.2.0)上运行这个 Ansible ad-hoc 命令

ansible host_alias -a "df -h" -u USER

其中 host_alias 是定义的 ansible hosts 文件(定义一个 ec2 实例及其 .pem 文件)。

主机文件如下所示:

[host_alias]

my_host.compute.amazonaws.com

private_key_file=/path/to/key/my_key.pem

我收到此错误:

private_key_file=/path/to/key/my_key.pem | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: ssh: Could not resolve hostname private_key_file=/path/to/key/my_key.pem: Name or service not known\r\n", 
    "unreachable": true
}
my_host.compute.amazonaws.com | UNREACHABLE! => {
    "changed": false, 
    "msg": "Failed to connect to the host via ssh: Permission denied (publickey).\r\n", 
    "unreachable": true

当我 ssh(由~/.ssh/config 定义)时,相同的主机和密钥工作正常。 我已经三重确保密钥在那里并且具有读取权限。我还尝试在 Ansible 主机文件中设置 ansible_user

有什么想法吗?

【问题讨论】:

    标签: ssh ansible ansible-inventory ansible-ad-hoc


    【解决方案1】:

    请检查文档中 Ansible inventory file 的格式。

    您在名为host_alias 的主机组中定义了两台主机:

    • 第一个主机是:my_host.compute.amazonaws.com

    • 第二个主机是:private_key_file=/path/to/key/my_key.pem

    Ansible 抱怨它无法连接到第二台主机:

    无法解析主机名 private_key_file=/path/to/key/my_key.pem

    它也无法连接到第一台主机,因为未定义 SSH 密钥:

    通过 ssh 连接主机失败:权限被拒绝(公钥)。


    除了将主机名和参数拆分为单独的行的错误之外,您还得到了错误的参数名称——应该是ansible_ssh_private_key_file

    参数列在the same document的后面部分。


    您的库存文件应如下所示:

    [host_group_name]
    my_host.compute.amazonaws.com ansible_ssh_private_key_file=/path/to/key/my_key.pem
    

    还有你的命令:

    ansible host_group_name -a "df -h" -u USER
    

    【讨论】:

    • 非常感谢技术人员!进行更改后,我必须再做两件事。在我的 ansible cmd 上传递一个 -u USER(我知道我可以将它添加到 ansible hosts 文件中)。其次,添加用户后,我收到一个错误,指出名称太长。我似乎记得这就是为什么我必须尝试用新线来打破这些线。我通过使用 IP 修复了字符长度问题。我可以忍受这一点。现在一切都好。谢谢!
    • 您很可能指的是这个问题:ssh throws 'unix domain socket "too long"' error。有一些建议的解决方案。
    【解决方案2】:

    第二行需要删除 [host_alias] 部分。 以上部分仅适用于主机。 一旦你这样做尝试

    ansible all -m ping

    检查是否可以 ping 主机。

    【讨论】:

      猜你喜欢
      • 2013-02-06
      • 2014-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-01
      • 2016-08-15
      • 1970-01-01
      相关资源
      最近更新 更多