通过跳转服务器进行远程端口转发

jmo*_*n12 3 networking remote port-forwarding ssh-tunnel

我有以下使用 ssh 进行远程端口转发的用例。我的本地网络上有一个许可服务器 (L)。我希望能够从目标服务器 (T) 获得许可。T 只能通过跳转盒 (J) 访问。为了使许可发挥作用,我需要两个特定端口可供 T 访问。我不想从 T 本地转发它们,因为我不会在这里进行开发。综上所述,我需要远程转发一个端口,比方说1025,如下:

L --> J --> T

目前的解决方案

目前,我只是做了两个远程端口转发,如下(后缀“_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
Run Code Online (Sandbox Code Playgroud)

这不起作用。J 上的 sshd 日志显示身份验证成功。首先,理论上正确吗?我应该另外配置T吗?

注意:我通常会在我的机器上使用本地端口转发直接 ssh 到 T 做类似的事情,我认为它会非常相似:

ssh -fNT -L [127.0.0.1:]2222:T_IP:22 user@J_IP
ssh -p 2222 user@localhost
Run Code Online (Sandbox Code Playgroud)

相关配置细节: J在/etc/ssh/sshd_config中有以下选项:

AllowTcpForwarding yes
GatewayPorts yes
Run Code Online (Sandbox Code Playgroud)

执行的测试: 我还必须说我不是 Linux 专家,所以我无法找到它不工作的所有可能原因。这些是它已经尝试过的场景:

  • GatewayPorts yes在 T 上
  • 在所有涉及的计算机上禁用防火墙

版本:所有涉及的机器都使用centos/RHEL 7.5。正在使用 openssh 7.4。结果ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips  26 Jan 2017
Run Code Online (Sandbox Code Playgroud)

建议

  1. 我应该对 ssh 进行更奇特的使用吗,即使用 ProxyCommand 或 RemoteCommand?
  2. 我是否缺少一些配置点,无论是操作系统还是 ssh 本身?

PS:这是我在 Stack 上的第一个问题,我可能忘记了关键信息。我会尽量在评论中做出反应。

jmo*_*n12 6

我终于在另一个 SlackExchange 社区找到了我的问题的解决方案,请参阅这篇文章

它包括使用 -J 选项(它是 ProxyCommand 或 ProxyJump 选项的快捷方式,但可用于 openssh >= 7.3)。应用于我的用例,它从 L 服务器给出以下内容:

ssh -fNT -R 1025:127.0.0.1:1025 -J user@J_IP user@T_IP
Run Code Online (Sandbox Code Playgroud)