![SSH 服务器上的远程端口转发以访问内部应用程序服务器](https://linux22.com/image/726123/SSH%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E8%BF%9C%E7%A8%8B%E7%AB%AF%E5%8F%A3%E8%BD%AC%E5%8F%91%E4%BB%A5%E8%AE%BF%E9%97%AE%E5%86%85%E9%83%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%9C%8D%E5%8A%A1%E5%99%A8.png)
我正在尝试弄清楚 SSH 端口转发,但通过查看不同的问题和教程并没有找到成功的方法,似乎我所看到的一切都与我的情况略有不同,我无法弄清楚如何将它应用到我的情况中。
我正在内部网络 (22.22.22.xx) 中的 Windows 计算机运行应用程序 (A)。此应用程序必须托管在此网络上。我在一台计算机上还有一个 Linux SSH 客户端/服务器 (S),该计算机具有用于 (22.22.22.xx) 网络的网络适配卡以及用于 (11.11.11.xx) 网络的网络适配卡。我有一个在 Windows 上运行的应用程序客户端 (C),它可以访问 SSH 客户端,但无法访问 (22.22.22.xx) 网络,因此无法直接访问 A。设置显示如下。
我正在尝试从 SSH 服务器设置端口转发,以便应用程序客户端可以访问应用程序服务器。
到目前为止,我已经能够使用应用程序客户端上的 PuTTY 使本地端口转发正常工作。我使用了以下命令(在 PuTTY 的 UI 上输入):
ssh -L 8888:22.22.22.5:5555 [email protected]
从这里,我可以转到“C”上的 localhost:8888,并通过“S”隧道到达“A”上提供的页面。但是,在理想情况下,我不想每次访问页面时都打开并运行客户端上的 PuTTY。
因此,我正在尝试找到一种方法来设置远程端口转发,以将“S”上的端口(例如 4444)转发到“A”。这样,从“C”我可以直接转到 11.11.11.4:4444,然后通过隧道进入 22.22.22.5:5555。
到目前为止,我已经尝试在“S”命令行中运行它:
ssh -R 4444:22.22.22.5:5555 user@localhost -o GatewayPorts=yes
当我运行这个命令时,我好像直接通过 ssh 回到了机器,我输入了凭证并尝试从客户端转到 11.11.11.4:4444,但我没有被定向到服务器。我还尝试在“A”上运行这个命令(但来自 PuTTY):
ssh -R 4444:localhost:5555 [email protected] -o GatewayPorts=yes
从此我在 PuTTY 事件日志中收到“远程端口转发失败”消息。
我感觉我已经非常接近解决方案了,只是我的命令有些令人困惑,或者我还远远偏离了方向,完全不明白发生了什么。
答案1
您不需要远程/反向转发,尽管使用本地版本(您的第一个示例)几乎没有区别,只是需要在服务器上进行配置。该选项GatewayPorts=yes
适用于 ssh 服务器,而不是 ssh 客户端。
在服务器 S 上尝试
ssh -g -L 4444:22.22.22.5:5555 user@localhost