Ansible Permission被拒绝(公钥)但ssh使用相同的密钥工作

时间:2017-04-11 22:25:52

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

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

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

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

请检查文档中的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

答案 1 :(得分:-1)

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

ansible all -m ping

检查您是否可以ping主机。