常用的远程桌面技术有 VNC、RDP、X2GO,还有例如 SSH X 转发。RDP 是 Windows 远程桌面实用的技术,在 Linux 有开源的 xrdp 方案(本人没用明白遇到一些问题,这里不介绍)。VNC 技术本身的缺陷是协议没有安全机制。不过现在一些 VNC 工具如 TigerVNC 本身可以设置使用密码、TLS 等技术加密连接。除此之外,更常用的方法是通过 SSH 连接 VNC,利用 SSH 自身的安全机制建立安全通道。
下面介绍一些常用的 VNC 工具
工具 | 平台 | 描述 |
---|---|---|
MobaXterm | Win | 功能强大,支持很多功能。其 VNC 客户端支持自动建立 ssh 隧道 |
Remmina | Linux | 开源产品功能和 MobaXterm 有交集。VNC 客户端可以自动建立 ssh 隧道 |
TeamViewer | Win、Linux、Mac | 非开源,无需公网 IP |
TigerVNC+SSH | Win、Linux、Mac | 通过 SSH 把 VNC Server 内部端口转发到本地机器,然后通过 TigerVNC 访问 |
VNC 服务端
启动 VNC 服务器有两种方式:一种是在命令行使用 tigervncserver :<screenid>
方式启动;另一种方式是使用 systemctl 服务的方式启动。
使用第一种方式需要注意使用哪个账号身份登录。当你在 root
用户下执行启动命令,则通过这个 screenid 对应端口连接服务器的客户端就是 root 用户。也就是登录后客户端使用的账号身份和启动命令时所使用的账号身份一致。
当使用 systemctl 启动 VNC 时,tigervnc 把整个过程分为两部分:服务管理和 screenid 分配。
其通过 tigervncserver@<:screenid>.service
管理服务器进程(启动和停止),使用 /etc/tigervnc/vncserver.users
文件建立 screenid 和用户身份的映射。
查看 X 使用了哪些端口
当使用 XVNC 共享用户界面时,需要知道具体的屏幕号(:id
)可以通过以下几个方法查看
# 方法 1
ps aux | grep X
# 方法 2
# 这将列出形如X0、X1等的文件,其中的数字表示显示号。
ls /tmp/.X11-unix
# 方法 3
# 显示已登录用户的信息,有时也可以用来查看活动的显示号(如果用户从图形界面登录)
w
# 方法 4
echo $DISPLAY