WindowsXPからKNOPPIX6.2にリモート接続する方法として、VNCというものがある。SSHが端末で操作するのに対して、VNCではKNOPPIXのXウィンドウが表示されて、マウスカーソルで操作することができる。ただ、VNCにはセキュリティ上の不安[1]がある。そこで、暗号化されているSSHのトンネルを使ってVNC接続をしてみよう。
環境
NEC LaVie L LL750/2D
KNOPPIX 6.2
無線LANルータによる有線接続
openssh-server 1:5.1p1-5
x11vnc 0.9.8-2
DELL OptiPlex GX270 Small Desktop
Windows XP Professional SP3
同じ無線LANルータによる有線接続
TeraTerm 4.66
TightVNC 1.3.10
手順
1.SSHのインストールと接続
2.VNCのインストールと接続
3.SSH転送によるVNC接続
1.SSHのインストールと接続
別の記事で紹介したので省略(「KNOPPIX6.2にSSH2リモート接続」)。
2.VNCのインストールと接続
(1)TightVNCのインストール[Windows側]
ダウンロードページ(日本語): sourceforge.jp
ダウンロードファイル: tightvnc-1.3.10-setup.exe
ダウンロードページ(英語): tightvnc.com
英語のダウンロードページtightvnc.comにはベータ版が出ているが、わたしは日本語サイトsourceforge.jpから、tightvnc-1.3.10-setup.exeをダウンロードした。
インストールで難しいところはない。WindowsからKNOPPIXに接続する場合、必要なのはTightVNC Viewerだけなので、TightVNC Serverはインストールしなくてもいいかもしれない。
(2)x11vncのインストール[KNOPPIX側]
VNCサーバとなるx11vncは、KNOPPIX6.2にはじめからインストールされている。バージョンを確認しておこう。
$ dpkg -l x11vnc
.
ii x11vnc 0.9.8-2 VNC server to allow remote access to an existing X session.
apt-cacheコマンドでアップデートを確認すると0.9.9-1というバージョンが表示されるが、アップデートはしていない。新しいバージョンと依存関係のあるlibc6をはじめとするライブラリファイルも同時にアップデートしなければならないので、収拾がつかなくなる可能性が高いからだ。
(3)x11vncのパスワード設定[KNOPPIX側]
パスワードなしでx11vncを起動すると、警告が表示される。この警告を表示させないオプションもあるようだが、パスワードはぜひとも設定しておきたい。(「パスワードの作り方、Google方式」journal.mycom.co.jp)
$ x11vnc -storepasswd
.
Enter VNC password:
Verify password:
Write password to /home/knoppix/.vnc/passwd? [y]/n
パスワードの保存先を確認してくるので、yを入力すればよい。
/home/knoppix/.vnc/passwdファイルには、入力したパスワードがそのまま書き込まれるわけではない。ホームディレクトリからviで開いてみると、[noeol][変換済]と表示されており、意味不明な記号が書かれている。viを閉じるには、:qと入力して[Enter]キー。
~$ vi .vnc/passwd
~/.vnc/passwdファイルのパーミッションも確認しておこう。ユーザknoppixだけに読み書きが許可されているはずだ。
~$ ls -l .vnc
.
-rw——- 1 knoppix knoppix …… passwd
(4)x11vncの起動[KNOPPIX側]
x11vncのコマンドでx11vncサーバが起動するが、パスワードを使用するオプションをつける場合、次のように入力することになる。
$ x11vnc -rfbauth /home/knoppix/.vnc/passwd
.
The VNC desktop is Microknoppix:0
PORT=5900
いくら待っても端末にプロンプトが返ってこないのは、異常ではない。この状態からx11vncを終了するには、Ctrlキー+Cキー。
端末が使いたかったら、もう一つ起動すればよい。psコマンドで、x11vncのプロセスを確認しておこう。
$ ps aux | grep x11vnc
.
knoppix 3573 …… x11vnc -rfbauth /home/knoppix/.vnc/passwd
3573という数字はx11vncのプロセス番号で、その都度変化する。この番号から、root権限のkillコマンドで、x11vncを強制終了することもできる。
# kill -9 [プロセス番号]
nmapコマンドで、vnc接続用のTCPポートが開いたことを確認しよう。
$ nmap localhost
.
5900/tcp open vnc
なお、デフォルトのnmapコマンドでは、TCPのポートが表示されている。vncやsshはTCPの通信規格なので、それらのサーバが起動していればこのコマンドで表示されるのだが、たとえばUDPのポート状況を確認するためには、別のオプションをつける必要がある。
(5)x11vncの自動起動[KNOPPIX側]
前回記事のsshと同じ要領で、x11vncも自動起動の設定ができる。/etc/rc.localの末尾に、次の一行を追加すればよい。改行を入れてはならない。sudoは必要ない。
/usr/bin/x11vnc -rfbauth /home/knoppix/.vnc/passwd -auth /home/knoppix/.Xauthority -display :0 -allow 192.168.**** -forever
.
-allow 192.168.****のアスタリスクの部分は、実際にはプライベートIPアドレスの数字が入っている。-allowは、特定のIPアドレスのクライアントからの接続だけを許可するという、強力なオプションだ。
-foreverオプションは、vnc接続を切断してもx11vncサーバが停止しなくなる。
-displayオプションは、なくても問題なさそうだが、起動がスムーズでまちがいがなくなる。
-authオプションは、エラーメッセージが出たときにその指示に従ってつけ足したものだ。
11xvncのオプションについては、manコマンドで長大なマニュアルページの解説を読むことができる。
$ man x11vnc
長いオプションを毎回入力するのはたしかに面倒なことだ。しかし、たいして必要がないのにx11vncの自動起動を設定しておくのは、セキュリティ上好ましいことではない。vnc接続をひと通りためして満足したら、行頭に#をつけてコメントアウトしておこう。
(6)オプション入力の省略[KNOPPIX側]
/etc/rc.localに頼らなくても、ユーザのホームディレクトリに.x11vncrcというファイルを作り、そこに必要なオプションを書いておけば、オプションを毎回入力する必要がなくなる。このことは、x11vncのマニュアルページの最初の方に書かれている。次のようにviで新規ファイルを作成し、そのまま編集する。
~$ vi .x11vncrc
.
i ・・・ここから編集(挿入)モード
.
rfbauth /root/.vnc/passwd
auth /home/knoppix/.Xauthority
display :0
allow 192.168.****
forever
.
[Esc] ・・・ここからコマンドモード
:wq
さきほど/etc/rc.localでは一行にまとめたオプションを、/home/knoppix/.x11vncrcではオプションごとに改行して書き出している。オプションの頭のハイフンは、つけてもつけなくてもよい。
これでVNCサーバが簡単に起動できるようになった。
$ x11vnc
なお、.x11vncrcファイルで設定したオプションを無効にしてx11vncを起動したいときには、端末でx11vncコマンドを入力するときに、-norcというオプションをつければよい。
(7)TightVNC接続[Windows側]
KNOPPIX側でx11vncが起動していることを確認した上で、TightVNC Viewerを起動する。

[VNC server]のボックスにKNOPPIXのローカル[グローバル]IPアドレスを入れて、[Connect]ボタンを押す。設定がうまくできていれば[Password]のボックスがあらわれるので、x11vncのパスワードを入力して[OK]する。すると、Microknoppix:0というウィンドウがあらわれ、KNOPPIXのXウィンドウの画面が表示される。
3 ^ SSH転送によるVNC接続
(1)SSH転送の設定
まず、TeraTermを起動する。接続はキャンセルする。TeraTermVTのウィンドウのメニューの[設定]から[SSH転送]>[追加]で下の図のようなウィンドウが開くので、以下の要領で入力する。

[ローカルのポート]に入れる番号は、[ポート]に入れる番号と同じでいいみたいだ。
[リモート側ホスト]には、KNOPPIX自身のIPアドレスを入力する。x11vncサーバからみるとVNCサーバは同じマシンにあるので、自分自身を転送先アドレスにしてx11vnc用の5900番のポートに転送をおこなう、という意味の設定のようだ。
[ポート]には、x11vncを起動したときに表示されるポート番号を入れる。デフォルトで5900だ。ディスプレイ番号が0以外の場合、その数字をここに足さなければならないかもしれないのだが、x11vncは二重に起動したりしないかぎりディスプレイ番号が0になるので関係ない。
[OK]で、TeraTermVT以外のウィンドウを閉じる。
(2)設定の保存
以上の設定を、TeraTermVTのメニューの[設定]から[設定の保存]>[保存]で、TeratermフォルダのTERATERM.INIというファイルに保存する。
(3)SSH転送によるVNC接続
KNOPPIXにx11vncが起動しており、TightVNCの接続はしていないという状態を確認する。x11vncを起動するとき、もしも-allowオプションがあったら切っておくこと。さもないと-allowオプションの威力を思い知らされることになる。
x11vncは、sshのTeraTermVT端末から起動することもできる。しかし、そうすると端末にプロンプトが返ってこないので、x11vncを起動している間TeraTermVTが使えないことになり、それなりに不便だ。ssh転送を使うのならx11vncの自動起動は有効にしてもいいということにしよう。
まず、ssh接続していることを確認する。続いてTightVNC Viewerを起動して、vnc接続をする。

[VNC server]のボックスには、さきほど[SSH転送]で設定したのと同じKNOPPIX自身のIPアドレス127.0.0.1を入れる。ここで2(7)のようにKNOPIXのローカル[グローバル]IPアドレスを入力しても接続できるが、それではただのvnc接続になってしまう。くれぐれも注意したいところだ。
[Connect]をクリックして、x11vncのパスワードを入力すると、ssh経由のvnc接続がおこなわれる。
今後TightVNCだけで接続することはないだろうから、もしも/etc/rc.localや/home/knoppix/.x11vncrcに-allowオプションがあったら、次のように修正しておこう。なお、接続を許可するIPアドレスをコンマで追加することもできる。
-allow 127.0.0.1
注1 ^TightVNCのセキュリティ上の不安
TightVNCは、パスワードをDESという方式で暗号化して送信する。しかし、それ以外の通信内容は暗号化されない。したがって、インターネット上でTightVNC接続をおこなうことは危険をともなう。
How secure is TightVNC?
Although TightVNC encrypts VNC passwords sent over the net, the rest of the traffic is sent as is, unencrypted (for password encryption, VNC uses a DES-encrypted challenge-response scheme, where the password is limited by 8 characters, and the effective DES key length is 56 bits). So using TightVNC over the Internet can be a security risk.
DESは今では多くの用途において安全ではないと見なされている。これは主に56ビットという鍵長が短すぎることに起因する。 … 近年、AES暗号に取って代わられた。
参考サイト
「x11vnc: a VNC server for real X displays」 karlrunge.com/x11vnc/
「リモートのLinuxデスクトップをWindowsから操作する方法教えます」 builder.japan.zdnet.com(2010年3月8日)
「sshでポート・フォワーディングしてVNCを使う」 nhh.mo-blog.jp/ttt(2006年6月9日)
「Ubuntu7.04 にx11vncをインストールする」 チラシの裏にでも書いてろ な!(2007年9月22日)