本文主要介紹如何在Linux下配置圖形服務(wù)以便ssh遠(yuǎn)程使用GUI環(huán)境。
X的概念
Linux的桌面環(huán)境是通過(guò)X Server(XFree86愁拭、Xorg)枪汪,X Client(libX11)梯皿,Window Manager(KDE、xfce逗威、wm2)等服務(wù)提供的。我們先簡(jiǎn)單了解X涉及的一些概念岔冀,下面的X架構(gòu)圖來(lái)自wikipedia凯旭,請(qǐng)注意X server是運(yùn)行在有屏幕的機(jī)器這邊,也就是你自己的PC上使套,而遠(yuǎn)程執(zhí)行的應(yīng)用罐呼,例如jvisualvm則是X的client端。換句話說(shuō)就是SSH的client端是X的server端侦高,SSH的server端是X的client端嫉柴。
Windows下常用的X Server是Xming和MobaXterm。它們都帶有簡(jiǎn)單的窗口管理服務(wù)奉呛,例如下圖就是MobaXterm WM配置差凹,以及啟用fvwm的窗口界面:
X server啟動(dòng)后默認(rèn)會(huì)監(jiān)聽(tīng)本地6000端口,X client通過(guò)環(huán)境變量
DISPLAY
獲取X server服務(wù)地址侧馅,例如DISPLAY=localhost:0.0
代表X server在本機(jī)6000端口危尿,DISPLAY=localhost:1.0
代表X server在本機(jī)6001端口依此類(lèi)推。建立連接之前馁痴,X server還需要驗(yàn)證X client的身份谊娇,最常的是基于Cookie機(jī)制,也就是client讀取~/.Xauthority
中的信息用于授權(quán)。
由于X server是監(jiān)聽(tīng)在本地的济欢,ssh服務(wù)端的遠(yuǎn)程client想連回本地必須使用remote tunnel赠堵,X11 forwarding則可以方便的將X11協(xié)議轉(zhuǎn)發(fā)到遠(yuǎn)程主機(jī)。轉(zhuǎn)發(fā)過(guò)程中會(huì)自動(dòng)設(shè)置DISPLAY
環(huán)境變量和Xauth授權(quán)信息法褥。
設(shè)置步驟和檢查點(diǎn)
- SSH服務(wù)端設(shè)置
檢查/etc/ssh/sshd_config
文件茫叭,確保以下參數(shù)正確:
X11Forwarding yes #啟用X11 Forwarding
#X11DisplayOffset 10 #默認(rèn)從10.0開(kāi)始設(shè)置DISPLAY環(huán)境變量
然后重啟sshd,重啟并不會(huì)導(dǎo)致已連上的ssh client斷開(kāi)半等。
service sshd restart
- SSH客戶端設(shè)置
-
PuTTY+Xming揍愁,確保Xming已開(kāi)啟,putty中已啟用X11 forwarding杀饵。
putty啟用X11 forwarding - MobaXterm默認(rèn)已啟動(dòng)X server和X11 forwarding莽囤,無(wú)需特別配置。
- 服務(wù)器的X配置
有些服務(wù)器可能沒(méi)安裝xauth導(dǎo)致無(wú)法編輯.Xauthority
文件切距,請(qǐng)用下面的命令安裝
sudo yum install xorg-x11-xauth
服務(wù)器的XLib版本則可以通過(guò)rpm -q libX11
命令確認(rèn)朽缎。
SSH調(diào)試
在MobaXterm命令行窗口執(zhí)行ssh -vvv root@host
可以看到詳細(xì)的debug信息,v的個(gè)數(shù)越多內(nèi)容越詳細(xì)谜悟。sudo或su之后無(wú)法連接X(jué) server
- 缺少
DISPLAY
環(huán)境變量:直接export之前賬戶的DISPLAY
信息话肖。 -
Authorisation not recognised
異常:導(dǎo)入前一用戶的xauth信息,比如導(dǎo)入test用戶的到當(dāng)前用戶下:
xauth add $(xauth -f ~test/.Xauthority list|tail -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)
- SSH跳轉(zhuǎn)后的設(shè)置
上面概念部分已經(jīng)說(shuō)過(guò)X11 forwarding本質(zhì)上就是通過(guò)ssh remote tunnel將本地X server轉(zhuǎn)發(fā)到遠(yuǎn)程狼牺,所以即使遠(yuǎn)程主機(jī)的X11 forwarding是關(guān)閉的,我們也可以通過(guò)ssh -R
轉(zhuǎn)發(fā)服務(wù)礼患。
ssh -R6000:127.0.0.1:6000 root@host #可以多次跳轉(zhuǎn)
export DISPLAY=localhost:0.0
#根據(jù)需要執(zhí)行xauth add