我有以下使用 ssh 进行远程端口转发的用例。我的本地网络上有一个许可服务器 (L)。我希望能够从目标服务器 (T) 进行许可。T 只能通过跳转箱 (J) 访问。为了使许可正常工作,我需要两个特定端口可供 T 访问。我不想从 T 本地转发它们,原因我就不在这里详述了。所以总而言之,我需要远程转发一个端口,假设为 1025,如下所示:
大写字母-->大写字母-->大写字母
当前解决方案
目前,我只是做了两个远程端口转发,如下所示(后缀“_IP”指的是相关的 IP 地址)
- 来自 L:
ssh -fNT -R 1025:127.0.0.1:1025 user@J_IP
- 来自 J:
ssh -fNT -R 1025:127.0.0.1:1025 user@T_IP
一切正常。
寻求解决方案
出于可用性和安全性原因,我希望通过一个隧道或至少一个命令完成转发。理想情况下,转发的端口不应从 J 处可用。在阅读了一些 ssh 文档和博客后,我从 L 中得出了以下命令:
ssh -fNT -R T_IP:1025:127.0.0.1:1025 user@J_IP
不行,J 上的 sshd 日志显示认证成功,首先理论上正确吗?还需要额外配置 T 吗?
注意:我通常在我的计算机上通过本地端口转发直接 ssh 到 T 做类似的事情,我认为它会非常相似:
ssh -fNT -L [127.0.0.1:]2222:T_IP:22 user@J_IP
ssh -p 2222 user@localhost
相关配置详细信息: J 在 /etc/ssh/sshd_config 中有以下选项:
AllowTcpForwarding yes
GatewayPorts yes
已进行的测试: 我还必须说,我不是 Linux 专家,所以我无法找出导致它无法工作的所有可能原因。以下是尝试过的场景:
GatewayPorts yes
在T- 所有相关机器上的防火墙均已禁用
版本:所有涉及的机器都使用 centos/RHEL 7.5。openssh 7.4 正在使用中。结果ssh -V
:
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
建议
- 我是否应该以更奇特的方式使用 ssh,即使用 ProxyCommand 或 RemoteCommand?
- 我是否遗漏了某些配置点,无论是操作系统还是 ssh 本身?
附言:这是我在 Stack 上的第一个问题,我可能忘记了关键信息。我会尽量在评论中做出回应。
答案1
我终于在另一个 SlackExchange 社区找到了我的问题的解决方案,请参阅这个帖子。
它包括使用 -J 选项(它是 ProxyCommand 或 ProxyJump 选项的快捷方式,但可用于 openssh >= 7.3)。应用于我的用例,它从 L 服务器提供以下内容:
ssh -fNT -R 1025:127.0.0.1:1025 -J user@J_IP user@T_IP