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

Mou*_*inX 15 ssh ssh-tunneling remote-desktop netcat

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

这是我的 SSH 隧道的样子:

laptop--->nat--->middleman<--nat<--desktop
Run Code Online (Sandbox Code Playgroud)

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

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

middleman<--nat<--desktop
Run Code Online (Sandbox Code Playgroud)

...这是它的建立方式:

autossh -M 5234 -N -f -R 1234:localhost:22 user@middleman.com
Run Code Online (Sandbox Code Playgroud)

关于这条腿:

laptop--->nat--->middleman
Run Code Online (Sandbox Code Playgroud)

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

me@laptop:~$ ssh -i ~/.ssh/id_rsa admin@middleman  
Run Code Online (Sandbox Code Playgroud)

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

me@laptop:~/.ssh$ nano config
Run Code Online (Sandbox Code Playgroud)

内容是:

Host family_desktops
  ProxyCommand ssh middleman_fqdn nc localhost %p
  User admin
  PasswordAuthentication no
  IdentityFile ~/.ssh/my_id_rsa
Run Code Online (Sandbox Code Playgroud)

哪里middleman_fqdn像“middleman.com”

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

me@laptop:~$ ssh family_desktops -p 1234
Run Code Online (Sandbox Code Playgroud)

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

通过这个 SSH 连接,我在我的计算机上找到了一个功能齐全的 shell,标记为desktop. 完美的。

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

这是我迄今为止尝试过的:

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

autossh -M 5235 -N -f -R 1235:localhost:5901 user@middleman.com
Run Code Online (Sandbox Code Playgroud)

建立连接后:

x11vnc -autoport 5901 
Run Code Online (Sandbox Code Playgroud)

我观察以确保它连接到端口 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
Run Code Online (Sandbox Code Playgroud)

隧道设置:

me@laptop:~$ sudo ssh family_desktops
Run Code Online (Sandbox Code Playgroud)

VNC客户端:

connect to localhost:5901
Run Code Online (Sandbox Code Playgroud)

这给出了“找不到服务器”的错误

我在 ProxyCommand 上尝试了许多变体,但没有一个成功。显然,我在猜测哪些参数应该在 ProxyCommand 中,哪些应该在 ssh 命令行上。我可以看到我的设置有一些潜在的问题,但我无法弄清楚是什么让它全部工作。

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

pra*_*k61 4

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