正常情况下,在创建 VNC 桌面后,我们可根据对应会话 ID 登录远程桌面。然而,并非所有服务器都开放了 VNC 桌面相应的端口,有时只会开放一个 SSH 端口,甚至需要通过端口转发访问 SSH 端口。此时,我们可通过 SSH 隧道技术通过 SSH 登录远程服务器并建立本地某端口到远程服务器 VNC 端口的 SSH 隧道,通过访问本地该端口实现访问 VNC 远程桌面的需要。

VNC 端口规则

VNC 的默认端口号是 5900。如果使用 VNC 工具访问: 192.168.6.31:1 时,那么应用实际访问服务器的端口为 5900 + 1 = 5901。在建立 SSH 隧道时,便需要将该端口映射到本地某端口即可。

SSH 隧道访问远程 VNC 桌面

1、远程服务器开启 VNC 服务

SSH 登录远程服务器,在命令行执行 vncserver -geometry 1920x1080 来创建会话,输出的最下面的 :n (n为一个整数) 就是你创建的会话 ID,初次执行 vncserver 需要创建一个 VNC 登录密码。

示例如下,此时会话 ID 为 1,则 VNC 实际端口为 5901

1
2
3
4
5
6
(base) xieqk@Ti-Twe:~$ vncserver -geometry 1920x1080

New 'Ti-Twe:1 (xieqk)' desktop is Ti-Twe:1

Starting applications specified in /home/xieqk/.vnc/xstartup
Log file is /home/xieqk/.vnc/Ti-Twe:1.log

2、建立 SSH 隧道

远程开启 VNC 桌面后,若为外网访问,且内网服务器只开放了 SSH 端口,可通过 SSH 隧道进行端口转发登录。若 VNC 桌面会话 ID 为 1,则其实际端口为 5901,于是将远程的 5901 端口映射到本地的 8888 端口如下,

1
2
3
4
5
# ssh -N -L <local port>:localhost:<remote port> <SSH hostname>
# SSH hostname: -p SSH_Port username@Host_IP
# -N 仅仅只用来转发,不用再弹回一个新的shell
# -L 进行本地端口转发
ssh -N -L 8888:localhost:5901 -p 35006 xieqk@202.38.88.88

3、VNC 通过本地端口访问远程桌面

在 VNC Viewer 里面,填入本地服务器地址:本地端口,如 localhost:8888,输入第一步创建的密码即可登陆图像界面,实现通过访问本地 8888 端口登录 VNC 远程桌面的目的。

完整流程如下:

SSH 隧道登录 VNC 远程桌面完整流程