Ubuntu 12.10‎ > ‎

X11 Forwarding

「sshのx11転送」を利用すると、リモートホストで起動したxアプリケーションのウインドウを、セキュアにローカルホストのモニタに表示させることが可能です。

前提として、ローカルホストでsshクライアント、リモートホストでsshサーバが既に稼働しており、公開鍵認証による通常のssh通信が可能な状態であるとします。

sshサーバの設定を確認します。

remote-user@remote-host:~$ cat /etc/ssh/sshd_config | grep X11
X11Forwarding yes      ←x11転送を許可
X11DisplayOffset 10    ←擬似xサーバのディスプレイ番号

sshクライアントの設定は、

①コマンドラインオプション
②ユーザ毎の~/.ssh/configファイル
③システム全体の/etc/ssh/ssh_configファイル

の優先順位で取得されますが、ここでは、コマンドラインオプション「-X」を使ってリモートログインします。

ちなみに「-Y」も使えますが、「-X」の方がセキュアな仕様になっているようです。

local-user@local-host:~$ ssh -X remote-user@remote-host
Enter passphrase for key '/home/local-user/.ssh/id_ecdsa': 
Welcome to Ubuntu 12.10 (GNU/Linux 3.5.0-27-generic x86_64)

* Documentation: https://help.ubuntu.com/

Last login: Mon Apr 29 15:41:20 2013 from xxx.xxx.xxx.xxx
remote-user@remote-host:~$

環境変数DISPLAYの値を確認してみます。

remote-user@remote-host:~$ echo $DISPLAY
localhost:10.0

上記のsshサーバの設定で確認した「X11DisplayOffset」の値が使われています。

TCPポートの状態を確認してみます。

remote-user@remote-host:~$ netstat -at
tcp 0 0 *:ssh               *:*                   LISTEN         ←sshサーバの待受
tcp 0 0 localhost:6010      *:*                   LISTEN         ←擬似xサーバの待受
tcp 0 0 xxx.xxx.xxx.xxx:ssh xxx.xxx.xxx.xxx:55079 ESTABLISHED    ←現在のssh通信の確立

擬似xサーバのTCPポート6010番(6000+10)がLISTEN状態になっています。

x11認証情報を確認してみます。

remote-user@remote-host:~xauth list  
remote-host/unix:10 MIT-MAGIC-COOKIE-1 88b30be2644732860782e9efbe029cbd

認証クッキーも自動的に生成されているようです。

例えば実際に、リモートホストでxtermを起動すると、ローカルホストのモニタに、xtermのウインドウが表示されます。

remote-user@remote-host:~$ xterm &

つまり、リモートホストの擬似xサーバ(sshサーバ)が、xtermのリクエストと認証クッキーを受けとって転送し、ローカルホストのsshクライアントがそれらを適宜変換して本当のxサーバへ送るというわけです…たぶん。

ubuntu 12.10では、x11通信のためのTCPポートはデフォルトで閉じられていますが、この方法だとTCPポートが閉じられたままでもx11通信が可能です。

Comments