背景/目标:
我需要从笔记本电脑>堡垒>目标主机运行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
? >
答案 0 :(得分:0)
使用SSH代理时,不考虑代理上的ssh配置文件。如果您具有上述配置(来自ansible网站),则对于SSH(和ansible)而言,就好像您具有直接连接一样。只是您的本地SSH配置文件很重要。
如果您真的想从堡垒中使用配置文件,则应将其带到运行ansible的计算机上,并且可能仅将配置的一部分应用到代理服务器之外的其他计算机上。< / p>
话虽如此,还必须提到,在ansible之外进行任何SSH配置并不是最佳实践,因为这会使您的剧本难以支持。您可能需要的所有SSH配置都必须放入ansible.cfg
,组变量和清单文件中。我建议您将SSH配置文件中的内容转换为ansible配置文件。
最后,请记住,ansible依赖于SSH。如果您可以成功地SSH到所需的计算机,那么ansible也可以这样做。始终最好先直接进行SSH调试,然后再切换到ansible。