设置有点混乱,但请跟上我的步伐
我在远程位置有一台 Linux 机器。那里还有一台 Windows 机器。它们都通过 LAN 连接
Linux 机器上正在运行一个程序,我可以通过使用浏览器打开本地主机来访问其结果。
现在,由于它的位置很远,我的第一个想法是使用类似以下命令启用远程桌面此设置。
然而,有人含糊地告诉我,还可以有另一种方法。
我们的想法是——基于上面描述的设置——访问本地主机将 Linux 机器与 Windows 机器连接起来(当然是通过浏览器),然后在 Windows 机器中运行我可以访问的远程桌面。
我的问题是,我该如何实现第二种选择?
答案1
然而,有人含糊地告诉我,还可以有另一种方法。
SSH 通常用于“访问另一台机器的本地主机”,也就是说,除了交互式 shell 之外,它还允许您轻松地通过服务器设置 TCP 连接隧道。(它不是以任何方式仅限于“localhost”访问,但这可能是相当常见的用法。)
使用
ssh
或plink
命令,使用-L
选项创建隧道:ssh -L <listenport>:<targethost>:<targethost> <sshserver> plink -v -N -L <listenport>:<targethost>:<targethost> <sshserver>
例如,要创建到服务器“localhost:80”的隧道,请选择客户端上的端口 5092,并将其指定
-L 5092:localhost:80
为命令的一部分。使用图形化 PuTTY,转到“连接 > SSH > 隧道”并添加“转发端口”。指定某个本地端口(客户端)作为源,程序的地址(服务器端)作为目标。
几乎所有其他 SSH 客户端在某处都有相同类型的“隧道”或“转发”设置。
SSH 上的程序客户系统将能够访问 处的隧道localhost:<listenport>
。
还有多种其他方法:
最直接的方法是重新配置程序以监听全部地址,而不仅仅是“localhost”地址,这样它就可以http://ubuntupc:8080
像普通的 Web 服务器一样通过 LAN 直接访问(例如)。但这确实有将程序暴露给整个本地网络因此,只有当您能够使用防火墙或其他方式限制访问时才应这样做。因此,在访问更敏感的服务时,SSH 隧道通常是首选。
如果程序无法重新配置或保持打开状态风险太大,则可以在同一台机器上设置 HTTP“反向代理”来监听连接,并将请求转发给实际程序(可能带有身份验证)。这就是许多常规 Web 应用程序设置为暴露在互联网上的方式——应用程序只监听本地主机,但使用反向代理前端来处理请求。
各种类似 ngrok 的“云反向代理”服务也可用于使程序可从任何地方访问(某些此类服务有添加身份验证的选项,有些则没有)。