2015年8月24日月曜日

FreeNX で新規セッション生成時の不具合を解消する

いまごろ FreeNX 使っているところはそう多くないだろうし、完全に手元のメモだけど。


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 --list の結果から、足りないロックファイルを生成するシェルスクリプトを生成させてシェルに流し込む。ひどいけど動いてる。


本当は nxserver を直さないとダメかと思ったけど、RPMから導入してるものをいじらずに対策できてよかった。っていうか自分でディスプレイ番号わかってるのに重複割り当てするとか情けない。。。。

おもうこと


Linux 向けのリモートデスクトップ環境として FreeNX(や X2GO)は割と快適なんだけど、いろいろ罠があってつらい。もっと鉄板なソリューションはないものか。。。