Language
Memo
Home > Memo > SSH X11 Forwarding

Home

Projects

Memo

Links

Contact







SSH X11 Forwarding:

由於在Linux的環境下,圖形介面是以X Server為基礎來進行顯示的,所以當我們以一般command-line模式連入時將會無法看到圖形介面,需要另外在本機啟動X Server,讓主機能將圖形介面送過來。

而X11的資料傳輸是採明碼傳輸的方式,因此比較沒那麼安全,透過SSH進行X11 forwarding的主要目的就是將主機要送過來的圖形介面加密後,透過SSH這通訊協定加密再傳到使用者端並顯示在使用者端的 X Server上,以達到保護資料的作用(這也稱為SSH Tunneling)。大致步驟如下:

*這些都是個人使用經驗,若有還煩請指正!

1.準備好你的SSH軟體(以下皆以PieTTY為例,你也可以用PuTTY

2.主機上的/etc/ssh/sshd_config裡面至少要有設定:
 另外兩組設定(給Xming用):

 則是讓你的client端連入主機時,會自動將DISPLAY參數設定成localhost:10
 (不過條件是你的pietty/putty有勾選Enable X11 Forwarding)
 修改後請記得重新啟動sshd服務。

3.準備好你的X Server軟體,如:ReflectionX / Xming / VNC Viewer / X-Deep 以下將列舉前三者的使用方式:

  個人認為ReflectionX使用最簡單,但缺點就是它不是免費軟體;VNC VIewer可攜性高,但缺點是設定與使用較複雜,因此如果環境設定得宜的話,Xming會是個不錯的選擇!

ReflectionX
優點:設定簡單,有截圖功能 缺點:需安裝,較吃資源,非免費軟體
ReflectionX啟動後不用管他,接著用PieTTY登入主機後輸入以下指令即可:
[Cypresslin@HPC ~] export DISPLAY=YOURIP:0

若登入用的帳號是個人帳號,那麼可以到自己的home資料夾底下修改.bashrc這個環境設定檔,
將export那行加入就可以了,或者輸入 declare -x DISPLAY=你的IP:0 將此設定寫入你的環境設定,
如此一來就不用每次連上線都要export一次。

(若你的Shell是csh而不是bash的話,請用 setenv DISPLAY 你的IP:0

  如果你希望ReflectionX在啟動之後能夠縮到右下角的系統列裡(系統時鐘那邊),而不要在下方的工具列占位子的話,請在View裡將"Hide Taskbar Icon on Minimize"這個選項打勾,如圖:
Minimize
如此只要當最小化ReflectionX時,它就會自動縮到系統列裡了: Minimized
 備註-實驗室機器上測試結果:idt - OK / GrADS 2.0.1 - OK / Vis5D 5.1 - OK / Vis5D+ 1.3.0B - OK

Xming - (記憶體用量≒15 MB) 載點
優點:記憶體用量相對較小,免費軟體 缺點:需安裝,伺服器環境需要額外設定
Xming的使用主要有兩種:

若你主機上的 sshd_config 檔中有設定 X11DisplayOffset 以及 X11UseLocalhost 的話

 只要在連線前將你的 PieTTY 切換至 PuTTY 模式:
 PuTTY Mode
 先在 Session 頁面填入欲連線的主機IP後,到 Connection / SSH / X11 分頁底下,勾選 Enable X11 Forwarding,並填入127.0.0.1:0即可。
 EnableX11Forwarding
 (注意,若先改動了X11分頁的設定,再回 Session 頁選擇先前已存的連線來連線將會使變動失效,建議可以先讀取已存的連線,然後變更X11設定後儲存。)

 連上主機後,輸入 echo $DISPLAY 若有出現 localhost:10.0 ,那就表示設定正確,可以正常使用了!

 備註:使用這個方法時,若你的.bashrc中有export DISPLAY...的設定,請將它註解掉。因為 X11UseLocalhost 的設定會讓主機幫你將它設定成localhost。

若你的主機沒有設定前述那兩個變數,而你也沒有修改的權限...

 在安裝Xming後請在它的啟動捷徑上按下右鍵→內容來加入 -ac 這個參數到啟動參數裡,如下:
 "C:\Program Files\Xming\Xming.exe" :0 -clipboard -multiwindow -ac
 此舉用意是在取消存取控制限制 (disable access control restrictions),讓每個人都能連線進來。

警告:請在可信賴的網域下才加入這個參數!

 PieTTY沒有需要任何需要修改的地方,直接連進主機後輸入export DISPLAY=你的IP:0 即可,倘若先前沒有加入-ac這個參數的話,可能就會看到以下錯誤訊息:

 Xlib: connection to "你的ip:0.0" refused by server
 Xlib: No protocol specified
 Error: Can't open display: 你的ip:0

 參考資料:http://www.dbuggr.com/smallwei/resolve-xlib-connection-localhost-0-0-refused-server-error/

 備註-實驗室機器上測試結果:idt - OK / GrADS 2.0.1 - OK / Vis5D 5.1 - OK* / Vis5D+ 1.3.0B -FAILED
 *需安裝字型檔:Xming-fonts

VNC Viewer - (記憶體用量≒5 MB) 載點
優點:記憶體用量小,免費軟體,免安裝 缺點:設定較為複雜

首先用PieTTY連入主機,輸入vncserver啟動VNC服務,此 時應該會看到服務啟動的訊息:

New '主機名稱:1 (使用者名稱)' desktop is 主機名稱:1

這裡的1代表的是第一個顯示螢幕,若再次啟動vncserver數字會接續下去。
同時主機可能也會要你設定密碼來供VNC Viewer使用,如果沒有可以用vncpasswd來進行設定,
接著開啟VNC Viewer,在Server欄位填入:主機ip:5901
VNCViewer
(這裡的port就是5900+1,VNC是第幾個顯示 螢幕就是加多少)

以上是用VNC Viewer直接連線的方法,並沒有透過SSH加密

若想要用SSH保護連線資料,則得在PieTTY中多一到設定的手續
在進入PuTTY模式之後,切換至Connection / SSH / Tunnels分頁底下:VNC Tunnel

在Source Port輸入你在本機上想給VNC Viewer用的port(本例中為1234
在Destination中輸入欲連線的主機位置、Port(此例中port為5901,ip為140.115.55.66)
這裡的port請依照你主機上啟動vncserver時顯示的數字再上+5900來填寫,
輸入完畢按下Add,它會新增資料到上面的顯示框中:
VNC Forwarded Port

一樣回到Session頁面填入主機IP等資訊後連線,連進去後記得先啟動vncserver,
接著到本機打開VNC Viewer,在Server欄位中填入:127.0.0.1:1234
這裡的port要跟你在PieTTY裡面所設定的Source Port一樣,接著填入連線密碼後就可以用了!
為何是127.0.0.1呢?因為SSH從伺服器把資料轉送到本機上,並使用1234這個埠。
比較特別的是用VNC Viewer所看到的畫面不大一樣:
VNC Viewer Screenshot

參考資料:http://senkao.pixnet.net/blog/post/23633976-透過ssh通道連結家中 ubuntu主機的vnc-server

備註-實驗室機器上測試結果:idt - OK / GrADS 2.0.1 - OK / Vis5D 5.1 - OK / Vis5D+ 1.3.0B - FAILED
備註1:用VNC Viewer連線時,即使將Viewer的視窗關掉,只要vncserver沒有停掉,那麼先前透過
    Viewer所叫出來的工作都還會在。
備註2:要結束掉vncserver,指令為vncserver -kill :1


備註:如果你是透過跳板連到主機,有可能會沒有辦法作X11的Forwarding,解決方式是請於連至欲連線之主機時加上-X的參數,如:ssh -X 你的帳號@主機ip 不過這個方法不保證每次都有效就是了。

  -X這個選項的意思根據其man page的說明其實指的就是對「不信任(Untrusted)的主機」啟用X Forwarding,因為是「不信任」的主機,所以會套用X11的一些安全性政策,某些不合法的操作會被禁止,相對來說安全一點。與其相對的就是-Y選項,也就是用在你所信賴(Trusted)的主機上,這些連線就不會被 X11 的安全性政策所限制囉,更詳細的資訊可以到說明裡面看,或是直接在 Linux 上執行 man ssh。

如果你本身的作業環境就是Linux,那事情更簡單了。以Ubuntu 12.04 / 14.04為例,只要確定被連線的主機上有安裝 openssh-server 這個套件,而且也有 X server,那麼直接從本機的終端機以 ssh 配合 -X 參數連過去就搞定了!如果沒有什麼其他特別設定的話,中間要跳多台電腦也沒問題。


<-Memo
inserted by FC2 system