2017-04-11 182 views
-1

我在Ubuntu上运行16.x(2.2.1.0 2.2.2.0版本ansible。和)这个Ansible的ad-hoc命令Ansible权限被拒绝(公钥),但使用SSH相同的密钥作品

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

任何想法?

回答

1

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

您已经定义在名为host_alias主机组的两个主机:

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

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

Ansible抱怨它不能连接到第二主机:

Could not resolve hostname private_key_file=/path/to/key/my_key.pem

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

Failed to connect to the host via ssh: Permission denied (publickey).


除了将主机名和参数拆分成单独的行的错误之外,您还得到了错误的参数名称 - 它是s应该是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 
+0

非常感谢你techraf!在做出改变之后,我必须做更多的事情。通过一个-u USER在我的我可靠的cmd上(我知道我可以将它添加到ansible hosts文件中)。其次,在添加用户之后,我收到一个错误,表明名称太长。我似乎记得这就是为什么我必须尝试用一条新线来分手。我通过使用IP修复了字符长度问题。我可以忍受这一点。现在都好。谢谢! – craig399

+0

最有可能你指的是这个问题:[ssh抛出'unix域套接字“太长”'错误](https://github.com/ansible/ansible/issues/11536)。有一些解决方案建议。 – techraf

-1

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

ansible所有-m平

,以检查是否可以ping主机。

相关问题