SSH协议中有X转发协议。在SSH的客户端putty中只要选中Enable X11 forwarding(在命令行下输入 –X 选项)就可以把远程的窗口带到本地,很方便。
SSH X11转发:
由于在Linux的环境下,图形介面是以X Server为基础来进行显示的,所以当我们以一般command-line模式连入时将会无法看到图形介面,需要另外在本机启动X Server,让主机能将图形介面送过来。
而X11的资料传输是采明码传输的方式,因此比较没那么安全,透过SSH进行X11 forwarding的主要目的就是将主机要送过来的图形介面加密后,透过SSH这通讯协定加密再传到使用者端并显示在使用者端的X Server上,以达到保护资料的作用(这也称为SSH Tunneling)。
Linux的X Window图形系统是一个经典的Server/Client架构。在系统中如Firefox等需要显示GUI界面的应用程序,实际上是作为客户端即X Client,这些程序在编写的过程中自然需要调用与界面显示相关的API,但这些API实质上只是一层封装,它真正做的事情是发送大量绘图相关的底层指令。而真正在调用显卡等硬件资源进行窗口绘图等实际操作的,则是另外一个独立的X Server服务端,它可以看作是一个独立的服务器程序。这两者通过正常的网络协议进行通信,服务端接收到客户端的绘图指令之后,在屏幕上绘制图像。
这个设计的巨大优越之处就在于客户端和服务端是解耦的,两者可以分别运行在不同的机器上!也就是说,可以在一台机器上面运行GUI程序但不启动X Server,绘图的相关指令通过网络传输到另外一台启动了X Server的机器上,再由X Server调用本机硬件资源,在屏幕上显示出界面。这也就意味着我在VPS上面完全可以只安装Firefox而不安装桌面环境,然后在我笔记本上面启动一个X Server,通过适当的设置就可以使得VPS上运行的浏览器以原生窗口的形式显示在我笔记本上。