从 IntelliJ 通过正在工作的 ssh 隧道连接到端口?

从 IntelliJ 通过正在工作的 ssh 隧道连接到端口?

我正在开发一个位于远程 Ubuntu 14.x 服务器上的服务器应用程序。该应用程序正在监听远程机器上的端口 8000。我有一个正确的 SSH 会话,因此我已进入该机器,并且我也有 sudo 功能。

我办公室的本地 Linux 系统上安装了 IntelliJ,它也运行着 ubuntu 14.x。我需要让它连接到远程机器上的端口 8000,以进行 IntelliJ 远程调试会话。远程机器上的端口 8080 不对外开放。

是否有一个实用程序、IP 表技巧(在远程设备上)或 SSH 技巧等,可以为我的系统提供一个本地端口供 IntelliJ 连接,然后通过 SSH 隧道将往返于该端口的流量代理/转发到远程系统上的端口 8000?换句话说,它会让我本地设备上的 IntelliJ 认为它正在直接与远程设备上的服务器应用程序通信,而实际上它们之间的连接是通过活动的 SSH 隧道进行的?

我记得很久以前做过类似的事情,但我完全忘记了怎么做,当时远程客户端是 Windows 机器,所以解决方案是针对 Windows 系统的。这次本地系统和远程系统都是 Ubuntu 14.x 服务器。

答案1

在本地机器上设置转发隧道

autossh -f -N -L 0.0.0.0:8000:localhost:8000 username@remotebox

0.0.0.0:8000是 IntelliJ 将要连接的,它会认为 Web 应用程序正在本地机器上运行,绑定到每个本地接口并在端口 8000 上运行。

localhost:8000是隧道将连接到的位置,在 remotebox 的上下文中。localhost不再是localhost您正在处理的,而是localhostremotebox 机器内的接口。在那里,它将从用户上下文连接到端口 8000,这实际上是您的 Web 应用程序username

autossh是一个包装器ssh,当连接断开时,它负责自动重新连接。

如果您在 remotebox 上使用非标准 ssh 端口,请使用参数-P <PORT>来连接它。

如果上述内容不能满足您的要求,则值得看一下这个答案:https://unix.stackexchange.com/a/118650/61956 从那里我刚刚向你解释了第一张图。我在本地端口前面加上了接口0.0.0.0,我认为localhost当你省略它时它会默认为,如果你愿意的话你可以这样做。删除该0.0.0.0:部分可能更安全,因为如果localhost是默认值,那么网络上的任何人都不能使用你的机器来使用该 ssh 隧道。否则对他们来说,如果是您正在使用的机器的 IP,那么192.168.10.10:8000它将是远程 Web 应用程序的入口点。192.168.10.10

相关内容