我想用 FOSS 解决方案替换 TeamViewer。我需要支持一些远程计算机。我使用中间人服务器在两台计算机之间设置了一个工作 SSH 隧道,如下所示:
Kubuntu_laptop--->nat_fw--->Debian_Server<--nat_fw<--Kubuntu_desktop
此 SSH 隧道现在正在运行。
接下来,我想使用 SSH 隧道从“Kubuntu_laptop”连接到“Kubuntu_desktop”上的桌面。
关于该腿的连接:
Debian_Server<--nat_fw<--Kubuntu_desktop
它的建立方式如下:
autossh -M 5234 -N -f -R 1234:localhost:22 [email protected] -p 22
我无法更改现有的监控端口 (5234) 或远程 (-R) 端口号(本例中为 1234)。 vnc 能否通过此现有 SSH 连接建立隧道?更新:答案是no
;我需要设置一个新的 SSH 隧道以与 vnc 一起使用,如此处所述。
关于该腿的连接:
Kubuntu_laptop--->nat_fw--->Debian_Server
我可以使用所需的任何 SSH 参数。
我无法打开路由器/防火墙上的任何端口。
有人向我推荐了 x11vnc 服务器,所以我正在用它进行测试。它在桌面上运行并侦听端口 5900。但是,在启动 x11vnc 时我没有使用任何命令行选项,因此它可能尚未正确配置。
vnc 可以通过现有的 SSH 连接工作吗?请注意,没有定义端口 5900。请注意,我无法更改 -R 选项的端口号,如上所述。
我对如何使其工作有很多疑问,但其中一个问题是 vnc 是否可以侦听现有端口(上例中的 -R 1234)。如果是这样,我还能像现在一样通过 ssh 进入那个盒子吗?
到目前为止,这是我尝试过的:
在远程桌面(安装了 x11vnc 服务器的位置)上:
tester@Kubuntu_desktop:~> autossh -M 5234 -i ~/.ssh/my_id_rsa -fNR 1234:localhost:5901 [email protected]
确保 x11vnc 服务器正在端口 5901 上运行:
tester@Kubuntu_desktop:~> x11vnc -autoport 5901
在我的笔记本电脑上:
sudo ssh -NL 5901:localhost:1234 -i ~/.ssh/admin_id_rsa [email protected]
将本地 vnc 客户端连接到本地主机端口 5901
在 Kubuntu_laptop 中打开 KRDC 并连接到 (vnc)
localhost:5901
我的连接失败- server not found
。
答案1
听起来您当前在笔记本电脑和服务器之间有默认的 ssh 连接:
Kubuntu_laptop--->nat_fw--->Debian_Server
修改ssh连接的参数,这样就可以了
-fNL [localIP:]localPort:remoteIP:remotePort
例如:
-fNL 5900:localhost:1234
如果您的笔记本电脑在默认端口 5900 上使用 VNC,那么您将告诉您的笔记本电脑使用 vnc 到 localhost,然后将端口 5900 上的 VNC 流量发送到端口 1234 上的服务器。
接下来,您需要捕获到达端口 1234 服务器端的流量并将其转发到桌面:
Debian_Server<--nat_fw<--Kubuntu_desktop
修改桌面ssh连接的参数包括
-fNR [remoteIP:]remotePort:localIP:localPort
例如:
-fNR 1234:localhost:5900
发送到服务器本地主机上端口 1234 的所有流量现在都将传输到桌面并到达 VNC 服务器希望侦听的端口 5900。
将端口 5900 更改为适合您正在使用的协议。对于 RDP 可能是 3389,对于 VNC 可能是 5901,因为 5900 可能正在使用。另外,我只是随机选择端口 1234 在服务器上使用。
*针对您更新的问题的一些注释:
- ssh 的默认端口是 22,因此它
-p 22
是多余的,因为它会覆盖默认端口并将其设置为 22 - 这些设置看起来
localPort:remoteIP:remotePort
与 ssh 用于隧道的端口无关,该端口仍然是 22,除非您在客户端上使用 -p 覆盖它并覆盖 ssh 服务器上的端口。因此,前面提到的所有 ssh 命令都使用端口 22,您可以通过查看侦听和建立的网络连接来确认这一点。您不需要在防火墙上打开任何其他端口。前面的命令是正确的。 - 根据您在更新中添加的内容,桌面命令应该是
autossh -M 5234 -fNR 1234:localhost:5900 [email protected]
- 抱歉,对于 VNC 客户端,我没有任何建议。您必须为此提出一个单独的问题,但是我猜它会被否决,因为这是一个意见问题。
答案2
我验证了所描述的机制并为我工作。唯一的区别是我使用 127.0.0.1::PORT 作为 VNC 客户端参数,因为 :N 引用 X 窗口显示编号 N;要使用显式端口,我们必须使用双冒号作为分隔符。