2007.05.09 Wednesday
ssh のポート転送でリモートの Xクライアントを起動する
これまで Linux や FreeBSD はサーバ機としてのみ使っていて X Window System を利用する機会がなかったのですが, 仕事上どうしても Xアプリケーションを使わなければならなくなってしまいました。
XWindow ってよくワカンネ(´・ω・)
取り合えず, cygwin の X11 関連のパッケージを全てインストールし, cygwin のコンソールから,
$ startxwin.sh
を実行して Xサーバを起動。
この Xサーバに Xクライアントを接続してアプリケーションとして動作する仕組みのよう。
動作させる Xクライアントが入っているサーバはリモートにあり, 踏み台サーバを経由しなければなりません。
ローカルの cygwin Xサーバと通信させるには一工夫入りそう。
[Xサーバ] <---> [踏み台サーバ] <---> [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 を有効にすれば, 上のようなフォワーディングを自動的にやってくれるみたいなのですが, 踏み台を経由して〜などの多段になる場合も大丈夫なんでしょうかね?
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 を有効にすれば, 上のようなフォワーディングを自動的にやってくれるみたいなのですが, 踏み台を経由して〜などの多段になる場合も大丈夫なんでしょうかね?









Comments