1つ以上のホストをまたいでsshフォワードで窓を飛ばす

ホストA - ホスト B - ホスト C

ホストAはホストCにホストBを経由してしかsshログインできない。ホストBがうんうん計算しているとき、ホストCで例えばmatplotlibを実行し、グラフをホストAの画面に出力させたい。

いくつかやり方がある。

 

やり方1)

A$ ssh -NL 2022:C:22 B &
A$ ssh -X -p 2022 localhost
C$ xclock

やり方2)
A$ ssh -Y B

B$ ssh -Y C

C$ xclock

 

やり方1)の場合、半永続的である。なくすためにははじめのバックグラウンドにいってしまったプロセスをkillする。また、間違ったホスト名を与えると、リモートホストを間違ったぞというお節介が入りログインできなくなる。これを除去するためにはお節介の表示するコマンドを入力すれば良い。

ssh-keygen -f "[ホームディレクトリパス]/.ssh/known_hosts" -R "[localhost]:2022

 

やり方2)は一回こっきりだが、後腐れがないのでよい気がする。

 

やり方3)

ホストAのホームディレクトリの.ssh/configに以下を書く。

Host C
    ForwardX11 yes
    ProxyCommand ssh -W %h:%p B

そして、

A$ ssh C

C$ xclock

 

やり方4)

ssh -Y [user name']@C -J [user name]@A

C$ xclock

 

やり方3), 4)はホストAから一発でログインするので、ホストBにログインしている場合、戻らないといけないのが面倒。

 

sshforward(-Yオプション)がsshdで受け付けられない場合、

/etc/ssh/sshd_configに

X11UseLocalhost no

を追加して

/etc/init.d/ssh restart

でおk.