<< ふらり東北ツーリング 2007GW | main | mod_proxy_balancer と ajp と stickysession >>

ssh のポート転送でリモートの Xクライアントを起動する

これまで Linux や FreeBSD はサーバ機としてのみ使っていて X Window System を利用する機会がなかったのですが, 仕事上どうしても Xアプリケーションを使わなければならなくなってしまいました。

XWindow ってよくワカンネ(´・ω・)

取り合えず, cygwin の X11 関連のパッケージを全てインストールし, cygwin のコンソールから,

$ startxwin.sh

を実行して Xサーバを起動。
この Xサーバに Xクライアントを接続してアプリケーションとして動作する仕組みのよう。

動作させる Xクライアントが入っているサーバはリモートにあり, 踏み台サーバを経由しなければなりません。
ローカルの cygwin Xサーバと通信させるには一工夫入りそう。

[Xサーバ] <---> [踏み台サーバ] <---> [Xクライアント]
Xプロトコルを転送するには, sshd のオプションを

X11Forwarding yes

にして, ssh の config に ForwardX11 yes と書くか -X を付けて接続すればよいみたい。
でも sshd_config 見てみたら no。

勝手に設定変えるのもアレなので, ssh のポートフォワーディングで対応することにしました。
ポートフォワーディングはもっぱら sshログイン先のポートをローカルに持ってくる用途に使われがちですが, 今回はローカルの cygwin Xサーバのポート6000番を Xクライアントまで持っていきます。


1. Xサーバのポート6000を踏み台サーバへ転送

[local]$ ssh -R 6000:localhost:6000 fumidai.example.com

2. 踏み台サーバのポート6000を Xクライアントサーバへ転送

[fumidai]$ ssh -R 6000:localhost:6000 xclient.private.example.com

3. DISPLAY環境変数を設定

[xclient]$ export DISPLAY=localhost:0.0

4. Xクライアント起動

[xclient]$ xclock (xeyes でも xlogo でもお好きなモノを)


ローカルマシンに Xアプリケーションが表示されたら成功です。

Xクライアントサーバで既に 6000番ポートが使用されていたら, 6001, 6002...と使っていないポートを指定します。


2'. 踏み台サーバのポート6000 を Xクライアントサーバのポート6001へ転送

[fumidai]$ ssh -R 6001:localhost:6000 xclient.private.example.com

この場合, DISPLAY環境変数のディスプレイ番号部分はポート6000 からのオフセットを指定しなければならないようです。

3'. DISPLAY環境変数を設定(ポート6001 の場合)

[xclient]$ export DISPLAY=localhost:1.0


ssh のリモートフォワーディングを活用すれば, 踏み台サーバの奥底深くにあるサーバの Xアプリケーションも快適に実行することができそうです。
動作遅そうですけど...

ところで X11Forwarding を有効にすれば, 上のようなフォワーディングを自動的にやってくれるみたいなのですが, 踏み台を経由して〜などの多段になる場合も大丈夫なんでしょうかね?
はてブへ追加 この記事のはてブユーザ
Tech > Others | comments (0) | trackbacks (0) | pagetop↑

Comments

Post your Comment

Trackbacks