我在网上看到过很多 SSH 隧道的例子,但我仍然没有成功。以下是设置:
- 私有网络中的 Windows 7 PC,位于防火墙后面,PowerShellInsider SSH 服务器设置并运行良好。
- 公共访问 Linux 服务器,可以访问 PC。
- 家里的 Windows 7 笔记本电脑,我希望通过它在 PC 上进行远程桌面操作。
现在,以下是我迄今为止尝试过的:
- 从我的笔记本电脑到 Linux 服务器的 SSH 隧道: ssh -f my_user@LINUX_SERVER -L 6666:LINUX_SERVER_IP:6666 -N
- 通过 SSH 连接到 Linux 服务器,我已经在该服务器上建立了到 PC 的隧道: ssh -f 'PRIVATE_DOMAIN\my_user'@PC_NAME -L 6666:PC_IP:3389 -N
不幸的是,我肯定做错了什么,因为它似乎不起作用。有什么想法可以解释为什么,或者至少有什么建议可以让我尝试调试这个设置?目前,我可以访问所有 3 台机器(Linux 上的非 root 用户),因此我可以测试任何我想要测试的东西……
答案1
当我遇到非常相似的问题时,我会这样做(但我的是通过 Linux 的 Linux,并且我使用端口 5901 进行 VNC):
首先,我们让你localhost:13389
笔记本电脑上的所有连接都转到中间服务器(端口 3389):
laptop$ ssh -L 13389:localhost:3389 my_user@LINUX_SERVER_IP
然后,我们使所有到localhost:3389
中间服务器的连接都转发到防火墙后面的 PC(在端口 3389 上):
my_user@LINUX_SERVER_IP$ ssh -L 3389:localhost:3389 'PRIVATE_DOMAIN\my_user'@PC_NAME
(请注意,此命令在中间服务器上的交互式 shell 内运行。)
现在,您应该能够连接localhost:13389
并访问远程 PC 上的端口 3389。
调试
由于它不起作用,我们可以尝试一些方法。我们将采取某种方法来隔离问题所在:
- 在您想要访问的远程 PC 上,您能否
telnet localhost 3389
确保它已打开并准备好连接?Microsoft 有一个不错的文章在上面 - 如果可行,您可以尝试
telnet localhost 3389
执行中间服务器检查它是否正确转发到远程 PC? - 最后,
telnet localhost 13389
在您的笔记本电脑上,查看它是否完全转发。
一旦遇到错误,请立即停止并添加评论,以便我们解决问题。
答案2
我认为您使用的命令语法错误ssh
。
由于您在 Windows 7 机器上运行了 PowerShellInsider SSH 服务器,我假设您想通过隧道访问 SSH 服务器,对吗?
无论如何,假设 SSH 服务器在标准端口上运行,那么在你的家用计算机上运行的命令应该是这样的:
$ ssh -N -L 22222:ip-address-windows7-at-work:22 user@linux-server
然后,使用本地套接字(22222)通过 ssh 进入远程 Windows 7:
$ ssh localhost:22222
如果您尝试隧道传输远程桌面协议,则只需更改“正确”的端口号:
$ ssh -N -L 22222:ip_address_windows7_work:3389 user@linux-server
答案3
对于 win11(使用 wsl 进行 ssh),可以执行以下操作:
ssh -L 127.0.0.2:3389:windowstargethost.server.arpa:3389 [email protected]
然后在远程桌面连接中使用 127.0.0.2,否则你会得到类似“ 您的计算机无法连接到远程计算机上的另一个控制台会话,因为您已经有一个正在进行的控制台会话。如果使用 localhost 或 127.0.0.1”