SSH下Linux X Server的配置

本文主要介绍如何在Linux下配置图形服务以便ssh远程使用GUI环境。

X的概念

Linux的桌面环境是通过X Server(XFree86、Xorg),X Client(libX11),Window Manager(KDE、xfce、wm2)等服务提供的。我们先简单了解X涉及的一些概念,下面的X架构图来自wikipedia,请注意X server是运行在有屏幕的机器这边,也就是你自己的PC上,而远程执行的应用,例如jvisualvm则是X的client端。换句话说就是SSH的client端是X的server端,SSH的server端是X的client端。

SSH下Linux X Server的配置_第1张图片
https://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture

Windows下常用的X Server是 Xming和 MobaXterm。它们都带有简单的窗口管理服务,例如下图就是MobaXterm WM配置,以及启用fvwm的窗口界面:
SSH下Linux X Server的配置_第2张图片
MobaXterm配置X server

SSH下Linux X Server的配置_第3张图片
在fvwm中显示的jvisualvm和jconsole

X server启动后默认会监听本地6000端口,X client通过环境变量 DISPLAY获取X server服务地址,例如 DISPLAY=localhost:0.0代表X server在本机6000端口, DISPLAY=localhost:1.0代表X server在本机6001端口依此类推。建立连接之前,X server还需要验证X client的身份,最常的是基于Cookie机制,也就是client读取 ~/.Xauthority中的信息用于授权。

由于X server是监听在本地的,ssh服务端的远程client想连回本地必须使用remote tunnel,X11 forwarding则可以方便的将X11协议转发到远程主机。转发过程中会自动设置DISPLAY环境变量和Xauth授权信息。

设置步骤和检查点

  1. SSH服务端设置
    检查/etc/ssh/sshd_config文件,确保以下参数正确:
X11Forwarding yes   #启用X11 Forwarding
#X11DisplayOffset 10   #默认从10.0开始设置DISPLAY环境变量

然后重启sshd,重启并不会导致已连上的ssh client断开。

service sshd restart
  1. SSH客户端设置
  • PuTTY+Xming,确保Xming已开启,putty中已启用X11 forwarding。


    SSH下Linux X Server的配置_第4张图片
    putty启用X11 forwarding
  • MobaXterm默认已启动X server和X11 forwarding,无需特别配置。
  1. 服务器的X配置
    有些服务器可能没安装xauth导致无法编辑.Xauthority文件,请用下面的命令安装
sudo yum install xorg-x11-xauth

服务器的XLib版本则可以通过rpm -q libX11命令确认。

  1. SSH调试
    在MobaXterm命令行窗口执行ssh -vvv root@host可以看到详细的debug信息,v的个数越多内容越详细。

  2. sudo或su之后无法连接X server

  • 缺少DISPLAY环境变量:直接export之前账户的DISPLAY信息。
  • Authorisation not recognised异常:导入前一用户的xauth信息,比如导入test用户的到当前用户下:
xauth add $(xauth -f ~test/.Xauthority list|tail -1)
  1. .Xauthority的一些异常可以试试下面这组命令
# Rename the existing .Xauthority file by running the following command
mv .Xauthority old.Xauthority 
# xauth with complain unless ~/.Xauthority exists
touch ~/.Xauthority
# only this one key is needed for X11 over SSH 
xauth generate :0 . trusted 
# generate our own key, xauth requires 128 bit hex encoding
xauth add ${HOST}:0 . $(xxd -l 16 -p /dev/urandom)
  1. SSH跳转后的设置
    上面概念部分已经说过X11 forwarding本质上就是通过ssh remote tunnel将本地X server转发到远程,所以即使远程主机的X11 forwarding是关闭的,我们也可以通过ssh -R转发服务。
ssh -R6000:127.0.0.1:6000 root@host   #可以多次跳转
export DISPLAY=localhost:0.0
#根据需要执行xauth add

你可能感兴趣的:(SSH下Linux X Server的配置)