XForwardingのやり方

ついでに、ssh XForwardingのやり方も調べました。

設定方法

例として、sshdが動いているRemoteマシンと、そこへssh接続するLocalマシンがあり、RemoteマシンでXクライアント(emacsとか)を起動し、LocalマシンのXサーバで表示する場合を考えます。

Remoteマシンのsshd_configを以下のように書き換えます

X11Forwarding noX11Forwarding yes

設定を有効にするため、sshdを再起動します。

# /etc/init.d/sshd restart

あとは、Localマシンから以下のように接続します

$ ssh -X user@remote.domain

sshでRemoteマシンに接続した後、以下のような出力があればXForwardingに成功しているはず。

$ echo $DISPLAY
localhost:10.0

$ emacs     #Localマシン上にemacsのウインドウが表示される

なお、ssh接続時に、~/.Xauthorityが生成されない場合、xauthプログラムが入ってない可能性がありますので、yum install xauthとかで入れて、接続しなおしてください。

やってみた感じ、通信データ量はかなり多いみたいですね。
回線が細いと、emacsの起動をするだけで数分かかります。


また、XForwardingの場合、nohupでXアプリを起動しても、sshコネクションを終了するとXアプリも終了してしまいます。

おそらく、sshコネクション終了時にRemoteマシン上に作られた擬似Xサーバも終了してしまうからでしょう*1

環境変数DISPLAYについて

環境変数DISPLAYは、":0.0"(通常)だったり、"localhost:10.0"(XForwarding)だったりしたんですが、値の意味が気になったので色々検索してみると、解説が見つかりました。

以下引用*2

環境変数`DISPLAY'の書式は`HOST:DISPLAY.SCREEN'です。HOSTはXウィンドウシステムのサーバーマシンの名前、DISPLAYは同じマシンの別のサーバーと読者のサーバー(X端末)を区別するために任意に割り振られた番号、SCREENは稀にしか使いませんが1つのXサーバーで複数の端末画面を制御する場合に使います。ピリオドとSCREENは省いてかまいません。指定する場合、SCREENは普通はゼロです。