通过 SSH 的 X11 Forwarding 连接 Linux 桌面

通过 SSH 的 X11 Forwarding 连接 Linux 桌面

远程 Linux 桌面有很多方式,常规有三种方式:

接下来我们重点介绍 SSH X11 Forwarding。

X11 Forwarding 与 SSH 的基本概念

参考资料:X Window System - Wikipedia

X11 是 X Window System 主版本 11 的缩写,它不光是一个基本的 GUI 软件,X11 也被定义为一个网络协议,因为 X11 提供了非常灵活的网络访问接口。

X forwarding 是 X 的一个功能,它可以让程序运行在一台主机上,而用户在另外一台机器上与之交互。其概念上与 VNC 和微软的远程桌面类似,而与这些软件不同,我们想要实现的是在 Microsoft Windows 平台运行特定的图形用户界面程序,而不是显示控制整个桌面。其效果有点类似于腾讯会议过程中,可以实现仅共享特定窗口,而不是共享整个桌面。如何实现这个效果,可以看看这个教程:本地显示远程图形化界面、服务器配置图形化界面

在 X 上下文中,客户端 client 是指运行程序的主机,而你坐在服务器 Server 前面,这点和常规的叫法不同。举例来说,你通过 A 远程打开 B 上面的程序,也就是说你在操作 A,而你要远程控制 B,那么 B 就是客户端,A 是服务端。
SSH 的 X11 forwarding 特性可以使 X client 和 X server 安全地通讯。使用 X11 forwarding 后,从 X client 到 X Server 方向的数据先被送至 SSH server,SSH server 利用和 SSH client 的安全通道转发给 SSH client,再由 SSH client 转发给 X server,从 X server 到 X client 的数据流同理。这里 SSH server 和 SSH client 充当了 X client 和 X server 间数据的转发器,由于 SSH server 和 X client、SSH client 和 X server 一般在同一台机器上,它们之间是一种安全的进程间通讯,而 SSH server 和 SSH client 间的通讯也是安全的,所以 X client 和 X server 间的通讯就是安全的。

具体实践

Linux 服务器我们选择 Centos7,并进行带桌面安装,其默认桌面是 Gnome 桌面,Gnome 桌面或者说 X11 本身就是一个 TCP 的 X Server 加 X Client 实现。

我们在 Windows 发起远程连接,我们选择的远程工具是 MobaX term 软件,默认自动开启了 X Server 及 X11 Forwarding 及传输压缩,不需要进行额外的配置。

首先配置服务器,修改 sshd 的配置

vim /etc/ssh/sshd_config

设置以下配置,默认情况下,X11Forwarding 的配置就是 yes

X11Forwarding yes

重启 sshd

systemctl restart sshd 

然后还需要注意,防火墙可能会阻止 ssh 的 X11 Forwarding,如果出现无法连接的情况,记得关闭防火墙试一试。

然后,我们打开 MobaX term 创建 SSH 会话,除了填写基础的主机 IP 和登录账户和端口之外,还要注意下图中的两个配置,因为 Centos7 的桌面是 Gnome 桌面,因此在 Remote environment 这里我们应该选择 Gnome desktop(默认是 Interactive shell),如果选错了的话桌面会无法显示,有的 Linux 发行版会自行使用 KDE 为桌面,那这个时候就得选择 KDE desktop

桌面只是一个程序,可以随意卸载和安装,比如 Centos7 同样可以安装 KDE 桌面。

连接成功之后:

通过点击活动,可以正常浏览程序和文件

右键菜单好像有点问题,打开的是这样的菜单

而且操作延迟有点高,桌面刷新有点慢,不过因为配置起来很简单,还是有一定的使用价值的。

总结

不管 Linux 还是 Unix,其桌面系统大部分都是从 X window System 发展出来的,因此,几乎所有的 Linux 桌面环境都支持 X11,而在 windows 下,你只需要找到支持 X Server 的软件,通过这些软件都可以直接连接到 Linux 远程桌面,几乎不需要在服务端安装什么,这种易用性和兼容性是其他方案无法比拟的,最多只需要在防火墙上允许 X 的网络服务对外就可以。