通过 SSH 的 X11 Forwarding 连接 Linux 桌面
通过 SSH 的 X11 Forwarding 连接 Linux 桌面
远程 Linux 桌面有很多方式,常规有三种方式:
-
可以在 Linux 端安装和配置 XRDP,XRDP 是一个支持微软的 RDP(Remote Desktop Protocol 远程桌面协议)的守护程序,使用 Xvnc 或者 xorgxrdp 作为后台程序。然后在 Windows
远程桌面连接
即可连接 Linux 服务器的桌面。参考博客:在 Linux 中使用 xrdp - Azure Virtual Machines | Microsoft Learn -
一种方法就是 VNC,VNC 的安装与使用(Windows 环境下使用 VNC 进行远程桌面控制) - 简书
-
还有一种最通用的方式,就是通过 SSH 的 X11 Forwarding
接下来我们重点介绍 SSH X11 Forwarding。
X11 Forwarding 与 SSH 的基本概念
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 的配置
|
|
设置以下配置,默认情况下,X11Forwarding
的配置就是yes
|
|
重启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 的网络服务对外就可以。