0

我在 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_user在 Ansible 主机文件中设置。

有任何想法吗?

4

2 回答 2

2

请检查文档中 Ansible库存文件的格式。

您在名为 的主机组中定义了两台主机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.

这些参数在同一文档的后面部分中列出。


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

[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
于 2017-04-11T22:35:17.340 回答
-1

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

ansible all -m ping

检查您是否可以 ping 主机。

于 2017-04-11T22:38:15.810 回答