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端。

https://en.wikipedia.org/wiki/X_Window_System_protocols_and_architecture

Windows下常用的X Server是XmingMobaXterm。它们都带有简单的窗口管理服务,例如下图就是MobaXterm WM配置,以及启用fvwm的窗口界面:
MobaXterm配置X server

在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。


    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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,868评论 18 139
  • 概述 SSH是(Secure SHell protocol) 的简写,安全外壳协议(SSH)是一种在不安全网络上提...
    技术学习阅读 53,663评论 9 41
  • 我的应用场景是:在vps(root@159.89.206.20)上面跑了个只能在服务器本地访问的网页:127.0....
    ThomasYoungK阅读 1,213评论 0 0
  • SSH:1、查看SSH客户端版本有的时候需要确认一下SSH客户端及其相应的版本号。使用ssh -V命令可以得到版本...
    faraway_com阅读 1,380评论 0 6
  • 一、SSH 是什么 SSH(全称 Secure Shell)是一种加密的网络协议。使用该协议的数据将被加密,如果在...
    wangminglang阅读 6,554评论 0 4