我有以下使用 ssh 进行远程端口转发的用例。我的本地网络上有一个许可服务器 (L)。我希望能够从目标服务器 (T) 获得许可。T 只能通过跳转盒 (J) 访问。为了使许可发挥作用,我需要两个特定端口可供 T 访问。我不想从 T 本地转发它们,因为我不会在这里进行开发。综上所述,我需要远程转发一个端口,比方说1025,如下:
L --> J --> T
目前,我只是做了两个远程端口转发,如下(后缀“_IP”指的是相关IP地址)
ssh -fNT -R 1025:127.0.0.1:1025 user@J_IPssh -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在 …