OpenSSH資料一覧

XプロトコルをSSH転送する方法

2007/8/21更新

対応バージョン: 4

準備

まずSSHのサーバとなるマシン上でsshdを起動しておく。

XプロトコルのSSH転送をするためにはあらかじめsshdに以下の設定をしておく必要がある。

/etc/ssh/sshd_config
X11Forwarding yes
X11DisplayOffset <num>

また、上記マシンにおいてXクライアントがXプロトコルのSSH転送を許すために以下の2通りのどちらかの設定をしておく必要もある。

各ユーザ毎の設定 (~/.ssh/config)
ForwardX11 yes
システムワイドの設定 (/etc/ssh/ssh_config)
ForwardAgent yes
ForwardX11 yes

接続

設定が済んだらsshでサーバマシンに接続する。

ここではサーバマシンをserverとして説明する。

client% ssh server
XXX@server's password: ********

接続が成功するとDISPLAY環境変数には自動的にserverのsshdが管理するXサーバ番号が割り当てられているのが確認できる。

ここでのXサーバ番号はsshd_configのX11DisplayOffsetで設定したであり、netstatを実行すると6000 + のポートがLISTEN状態になっていることが確認できる。

server% printenv DISPLAY
DISPLAY=server:10.0

server% netstat -a
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4       0      0 *.6010        *.*             LISTEN
:

この状態でxterm等のXアプリケーションを起動するとXプロトコルのデータはSSHによって(暗号化されて)トンネル接続される。

netstatで状態を見るとESTABLISHEDに変わっている。

server% netstat -a
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp4       0      0 server.6010   client.3301     ESTABLISHED
:

リモートのXクライアントを起動するためにわざわざログインシェルを起動したくない場合はsshに-fオプションを付けてリモートで実行するコマンドを指定するとログインシェルがバックグラウンドで動作するので便利である。

client% ssh -f server xterm