Ansible:如何设置Ansible,以便使用堡垒的* SSH config *访问目标主机

时间:2019-06-12 02:54:26

标签: ansible ansible-2.x

背景/目标: 我需要从笔记本电脑>堡垒>目标主机运行Ansible,而目标主机则位于我无法控制的防火墙(IOT设备)之后。我在目标主机和堡垒之间有活动的反向隧道,这样我可以通过SSH进入我的堡垒,然后可以运行ssh <hostname>(在堡垒的SSH配置中存在“主机名”的位置)以访问任何目标主机。

所有目标主机在堡垒的SSH配置文件中都有唯一的条目,以便可以像这样访问它们(它们都在堡垒上使用相同的主机-本地主机,相同的身份密钥-并且如果有用,也位于本地,< em>,但是所有条目的端口都必须是唯一的)。

我尝试过的事情: 我已经尝试过Ansible的官方建议来设置一个跳转主机:https://docs.ansible.com/ansible/latest/reference_appendices/faq.html#how-do-i-configure-a-jump-host-to-access-servers-that-i-have-no-direct-access-to,该主机也复制到: https://stackoverflow.com/a/36850087/10145168

但是,此操作失败并显示以下错误:

UNREACHABLE! => {
    "changed": false,
    "msg": "Failed to connect to the host via ssh: ssh_exchange_identification: Connection closed by remote host",
    "unreachable": true
}

问题: 我认为问题在于,我需要从堡垒到目标主机的SSH命令采用以下形式:ssh <hostname>(其中,我所有的Ansible主机名也是堡垒的SSH配置中的别名)。否则,Ansible会尝试通过端口22连接到目标主机,这将失败。除非它使用堡垒的SSH配置文件,否则它将不知道在哪里可以找到从该堡垒访问目标主机的SSH密钥。

如何使Ansible使用ssh <hostname>ssh <user>@<hostname>的ssh命令,只要没有端口,这两个命令都应该起作用,并拾取堡垒的~/.ssh/config? >

1 个答案:

答案 0 :(得分:0)

使用SSH代理时,不考虑代理上的ssh配置文件。如果您具有上述配置(来自ansible网站),则对于SSH(和ansible)而言,就好像您具有直接连接一样。只是您的本地SSH配置文件很重要。

如果您真的想从堡垒中使用配置文件,则应将其带到运行ansible的计算机上,并且可能仅将配置的一部分应用到代理服务器之外的其他计算机上。< / p>

话虽如此,还必须提到,在ansible之外进行任何SSH配置并不是最佳实践,因为这会使您的剧本难以支持。您可能需要的所有SSH配置都必须放入ansible.cfg,组变量和清单文件中。我建议您将SSH配置文件中的内容转换为ansible配置文件。

最后,请记住,ansible依赖于SSH。如果您可以成功地SSH到所需的计算机,那么ansible也可以这样做。始终最好先直接进行SSH调试,然后再切换到ansible。