タイトルには PuTTY って書いたけど、実は PuTTY はそれほど関係ない。SSH ネタ。NetBSD 限定かも。
Windows 上で動く X サーバでリモートの NetBSD の X クライアント(たとえば xterm)を動かすとする。
やり方は複数あるけど、今やっている方法は、 X サーバの方で接続はローカルからのみ受け付けるように設定。
そして PuTTY の方で X11 フォワ-デングを有効にする設定をしておく。リモート X11 認証プロトコルは MIT-Magic-Cookie-1 だ。
putty.exe からリモートの xterm を起動しようとすると、不要な putty.exe のウィンドウが Window 上に現れるので、plink.exe を使う。下のような VB スクリプトを作っておくと、アイコンをダブルクリックするだけで リモートの xterm が起動する。余計なウィンドウは現れない。もちろん、事前に X サーバは実行しておく。ここで “apricot” というのは PuTTY に登録したセッションの名前だ。
Set sh = CreateObject("WScript.Shell")
sh.Run "plink apricot xterm",0,False
ここからが本題。
起動した xterm から、さらに別のマシンの xterm を実行しようとするとエラーになる。
apricot$ ssh -f blackberry xterm
Warning: No xauth data; using fake authentication data for X11 forwarding.
PuTTY X11 proxy: MIT-MAGIC-COOKIE-1 data did not match
原因は見ての通り、xauth のデータがうまく設定されていないこと。
apricot$ ssh -v -X blackberry xterm
(略)
debug1: No xauth program.
Warning: No xauth data; using fake authentication data for X11 forwarding.
(略)
? いやいやいや、sshd_config でちゃんと xauth のパス設定してるし。ほら、
(略)
# If you use xorg from pkgsrc then uncomment the following line.
XAuthLocation /usr/pkg/bin/xauth
(略)
とこれまで思ってたのだけれど、実は ssh クライアント(ここでは apricot)の方の ssh_config でも xauth の設定をしないといけないということだった。なんだってー。
つまり、
- apricot で実行する ssh がローカルの xauth を使って X11 の認証情報(MIT Magic Cookie)を読み取る
- apricot から blackberry へ X11 認証情報を送信する
- blackberry の sshd が X11 認証情報を xauth を使ってローカルファイルに格納する
- blackberry の xterm がローカルファイルの X11 認証情報を読み取る
という流れ。
sshd_config の設定は 3 のためのもので、 1 が正しく実行されるために ssh_config の設定も必要ということ。
xauth のパスが SSH のデフォルトと一致していたらこんな問題に当たらないので、関係するのは NetBSD で X を pkgsrc で入れてる人くらいかな?