我花了好几次时间试图弄清楚这一点,并尝试关注许多其他帖子。但出于某种原因,这让我感到困惑,而且其他情况似乎都不适用。
我想做的事:
注意:这些机器都不在同一个局域网上。
工作站 A - 互联网上某处/任何地方的 Linux 机器
服务器 - 互联网上的 Linux 虚拟专用服务器互联网 IP 地址 1.2.3.4
工作站 B - 我家用的 Windows 机器运行 RDP Internet IP 地址 5.6.7.8 NAT IP 地址 192.168.10.51
我希望 Linux 服务器充当 SSH“网关”,以便我可以通过 RDP 从工作站 A 连接到工作站 B
工作站 B 位于受限制的 ISP 上,它无法运行 sshd,但可以使用 SSH 客户端(如 Putty)连接到服务器。
这是我最近的努力:
因此从工作站 B 来看:
Using Putty: Host Name ( Ip Address ) 1.2.3.4
Port 22
SSH Tunnel Source Port 3389
Local Port localhost:3389
(已更新)选中“本地端口接受来自其他主机的连接”未选中“远程主机执行相同操作”在目标下选择“本地”和“自动”
然后在服务器上:
ssh -p 33890 -L 9833:192.168.10.51:3389 [email protected]
然后在工作站 A 上:
rdesktop 1.2.3.4:33890
我尝试了很多种方法,但我甚至不确定我是否正确理解了整个 ssh 隧道。
另外,我特别需要 SSH 隧道,但无法在 Worstation B 上安装 sshd。我实际上知道如何设置 PPTPD、IPsec 和其他,但这些在这里不起作用。因此,如果您有其他解决方案,则不适用。我只是想知道我的方案是否可以实现(因为我很困惑)以及我可能做错了什么。
抱歉,如果内容很长,我们会尽量避免含糊其辞。
我看了这篇帖子:[how-to-tunnel-windows-remote-desktop-through-ssh-using-a-linux-box][1] 它非常接近我的情况,但是 linux 机器不在我的本地网络上。
答案1
在 A 上,你可以运行例如
ssh -L 33890:192.168.10.51:3389 1.2.3.4
这将通过 ssh 连接到 1.2.3.4,并打开从 A 上的 33890 端口到 B 上的 3389 端口的隧道。因此,您可以在 A 上运行
rdesktop localhost:33890
连接到 B 上的 RDP。
A 和服务器之间的连接是加密的,但服务器和 B 之间的连接不是加密的(在您的 LAN 内)。如果您也想加密该部分,则让 B 连接到服务器并将服务器的端口转发到 B 上的 RDP 端口。在 B 上运行:
ssh -R 33891:localhost:3389 1.2.3.4
然后在 A:
ssh -L 33890:localhost:33891 1.2.3.4
(您可以用服务器上的任何可用端口替换 33891。)然后在 A 上您可以rdesktop localhost:33890
像以前一样进行连接。
这种方法的缺点是它依赖于 B 到服务器的连接保持畅通,但这些连接通常会在一段时间后超时。您可以尝试通过设置ServerAliveInterval
B 到服务器的连接来调整它,或者使用自动SSH当隧道发生故障时自动重新启动隧道。