有一个问题与我问的非常相似使用 B 上的私钥通过 SSH 从 A 经过 B 到达 C
这个问题确实有一个适合我的解决方案,那就是
ssh -t B ssh C
但是我没能将其转换为 Ansible 可以使用的内容。当我尝试时,它会抱怨语法无效。这是我尝试的
ansible_ssh_common_args='-t -i ~/.ssh/mykey admin@B ssh'
这给了我“意外令牌附近的语法错误”。我可以坚持下去,但我感觉 Ansible 在劫持此类 SSH 命令时可能会出现一些更严重的问题。
我也在 StackOverflow 上问过类似的问题https://stackoverflow.com/q/73975618/1196369- 但没有成功。
我已设法使用-J B
(ProxyJump)或ProxyCommand
选项使连接正常工作,但是这两个选项似乎都跳过了 B 上的 SSH 配置。我已在~/.ssh/config
B 上添加了配置,以便它在连接到 C 时使用反向隧道。使用ssh -t B ssh C
获取此配置并创建反向隧道,但使用 ProxyJump 或 ProxyCommand 不会创建反向隧道。
如果未创建反向隧道,则 C 将无法访问互联网,而这是我想要运行的 Ansible 剧本所必需的。
我可以-R
在原始命令中组合反向隧道,这有效……但这意味着隧道不是C -> A -> B
我C -> B
想要的。这看起来像:
ansible_ssh_common_args='-J admin@B'
ansible_ssh_extra_args='-R 3129:B:3128'
所以我的主要问题是如何在 Ansible 上将ProxyJump
(-J) 与 (-R) 结合使用RemoteForward
,其中从代理服务器创建反向隧道,并且不是主人?