通过 SSH 反向隧道的远程桌面替代 TeamViewer

通过 SSH 反向隧道的远程桌面替代 TeamViewer

我想通过 SSH(反向)隧道打开从笔记本电脑到桌面的远程桌面会话。这应该很简单(或者至少是可行的),对吧?到目前为止,我一直使用 Team Viewer 登录远程桌面。我希望在没有 Team Viewer 的情况下获得类似的结果。

我的 SSH 隧道如下所示:

laptop--->nat--->middleman<--nat<--desktop

所有计算机都运行 Linux(主要是 Kubuntu 12.04 或 OpenSuse 12.3)。我无法更改任何端口或在 nat 路由器上进行任何配置更改。

我将描述我的 SSH 隧道,因为理解这对于解决 VNC/远程桌面问题(这是我的问题的核心)似乎是必要的。关于这条腿:

middleman<--nat<--desktop

...它的建立方式如下:

autossh -M 5234 -N -f -R 1234:localhost:22 [email protected]

关于这条腿:

laptop--->nat--->middleman

我可以按如下方式连接到中间人:

me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman  

然而,我实际上需要做的是直接连接到桌面,而不是中间人。为此,我在中间人上使用 netcat(“nc”)。基于看来需要nc。因此,我在笔记本电脑上编辑 SSH 配置文件以使用 ProxyCommand 和 nc:

me@laptop:~/.ssh$ nano config

内容是:

Host family_desktops
  ProxyCommand ssh middleman_fqdn nc localhost %p
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

middleman_fqdn“middleman.com”在哪里

然后我只需一步连接到“桌面”:

me@laptop:~$ ssh family_desktops -p 1234

(我根据帮助得到了这个工作这里这里以及我问的其他相关问题。我就这个话题提出了很多问题,因为我已经为此苦苦思索了好几个星期了。)

通过此 SSH 连接,我在计算机上获得了一个功能齐全、标记为 的 shell desktop。完美的。

现在我只需要通过此 SSH 隧道提供类似 VNC(或类似 TeamViewer)的远程桌面解决方案。如何?

这是我到目前为止所尝试过的:

中间人<--nat<--桌面

autossh -M 5235 -N -f -R 1235:localhost:5901 [email protected]

建立连接后:

x11vnc -autoport 5901 

我观察并确保它连接到端口 5901,它确实连接了。

笔记本电脑--->nat--->中间人<--nat<--台式机

笔记本电脑~/.ssh/config:

Host family_desktops
  ProxyCommand ssh -NL 5901:localhost:1235 middleman.com nc localhost 1235
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa

隧道设置:

me@laptop:~$ sudo ssh family_desktops

VNC客户端:

connect to localhost:5901

这会出现“找不到服务器”的错误

我尝试了 ProxyCommand 的多种变体,但没有一个成功。显然,我猜测哪些参数应该在 ProxyCommand 中,哪些参数应该在 ssh 命令行上。我可以看到我的设置存在一些潜在问题,但我无法弄清楚如何才能使其全部正常工作。

PS 如前所述,我对此提出了几个问题。其中一些让我更接近解决方案,并构成了我当前问题的基础。我之前关于这个主题的其他问题只是表明我的无知和无法以正确的形式提出问题。在这一点上,当前的问题代表了我陈述我的问题是什么以及我想要的解决方案是什么的最佳能力,但我的其他一些问题也仍然悬而未决。这是一个这是相关的。

答案1

您可以尝试在不进行 nc 的情况下进行第二步吗?也就是说 - 仅使用 -L 和 -R 执行 VNC。我相信问题在于您的 netcat 会话正在连接回已打开的会话。因此,在执行 VNC 操作时不要使用 netcat。

答案2

您应该为中间人 sshd.conf 设置“gatewayports yes”,而不是 ProxyCommand。

  1. 然后采用从桌面到中间人的远程隧道,并在中间人中打开 TCP 端口 x 并在本地打开 vnc。
  2. 然后从笔记本电脑到中间人的本地隧道打开到本地主机的 vnc 端口并将其隧道连接到 x。
  3. 然后连接到 localhost:vnc,这样它将通过本地隧道到达中间人,并通过远程隧道到达笔记本电脑 vnc。

使其正常工作后,请详细了解网关端口的更安全设置。

相关内容