nx ユーザとしての localhost SSH 接続時にホスト鍵が一致しない場合の問題
FreeNX の認証方法にもよるが SSH 認証を使う場合、一度 NX ユーザとしてログインし、その NX ユーザから実際のユーザ権限で目的のサーバ(localhostかもしれない)に対して SSH ログインする仕組みになっている。
OS のイメージをコピーしたりする際、 ~nx/.ssh/known_hosts に localhost の鍵が含まれている。このため、 同ファイル中の「localhostの鍵」と/etc/ssh/の下にあるホスト鍵が一致しなくなると認証エラーとなりログインできない。うっかり設定をコピー展開したりSSH鍵を作り直したり、イメージを作成して展開した場合に嵌まる。
対策としては ~nx/.ssh/known_hosts を消す。(と現行の鍵が勝手に書き直される)
X ディスプレイのロックファイルが蒸発した場合に、新規セッションのディスプレイIDが既存セッションと衝突する
該当箇所は /usr/bin/nxserver のココ
FreeNX や X Window System の何かが /tmp/ 以下にロックファイルを作っている。 FreeNX の新規セッション作成時は、これらのファイルからディスプレイ番号の利用状況を判断して新しいディスプレイIDを割り当てる。
たとえば nxserver --list コマンドで下記のセッションがあるとして
127.0.0.1 1005 hasegaw 192.168.x.x 23BC130AD583AD79F715814CE73972B5
以下のロックファイルがひとつも見つからないと、NX Clientから接続された FreeNX は、重複したディスプレイ番号をセッションに割り当てようとして突然死し、ユーザから見ると何もわからない状況になる。
- /tmp/.X1000-lock
- /tmp/.nX1000-lock
- /tmp/X11-unix/X1000
本当は nxserver を直さないとダメかと思ったけど、RPMから導入してるものをいじらずに対策できてよかった。っていうか自分でディスプレイ番号わかってるのに重複割り当てするとか情けない。。。。
おもうこと
Linux 向けのリモートデスクトップ環境として FreeNX(や X2GO)は割と快適なんだけど、いろいろ罠があってつらい。もっと鉄板なソリューションはないものか。。。