アクセスサーバ経由でVNCを使う

これはオプショナル。普段は仮想アクセスサーバのデスクトップを外部からGUIでアクセスすることはないと思うので、あまり必要はない。アクセスサーバのメモリを最小限にするのであればサービスを起動しない方がいい。また、セキュリティの観点からも普段はサービスを実行しないでおいた方が無難だろう。ただ、何かに備えて設定だけしておいて、必要があれば、sshでログインしてからvncserverサービスを起動し、ノートPCからVNCでアクセスするようにしておくのも便利だ。

VNCの設定自身の説明はここでは割愛するが、ポイントは以下の通りである。

  1. (方針にもよるが)GNOMEvnc設定(5900ポートをつかうもの)はやめておく。普段からGNOMEを起動しなければならないのでメモリを圧迫するし、ポート番号が知れているので宜しくないと思う。(GNOMEの環境が必要な場合は、vncの~/.vnc/xstartup で設定する。)
  2. ノートPCからは「localhost:2」という指定でアクセスサーバのvncserverに接続する

まず、先程のTertermの設定で、SSHポート転送するポートとしてvncのポート設定を追加する。[ローカルのポート]は例えば5902番(これはvncの2番目の仮想デスクトップのサーバが使うポート番号)とする。[リモート側ホスト]は(SSHサーバとVNCサーバが同じマシンで動いているのであれば)"localhost"、[ポート]は"5902"となる。この設定の後にTeratermでリモートのアクセスサーバに接続する。

SSHでログインしたところで、vncserverを起動する。

[user@access-server ~]$ su -
Password:
[root@access-server ~]# service vncserver start
Starting VNC server: 2:user
New 'access-server.localdomain:2 (user)' desktop is access-server.localdomain:2

Starting applications specified in /home/user/.vnc/xstartup
Log file is /home/user/.vnc/access-server.localdomain:2.log

                                                           [  OK  ]
[root@access-server ~]# exit

この様にvncserverは必要な時だけ起動する方が良いだろう。なお、こういった環境では"sudo"コマンドより"su"コマンドの方が良いかも知れない。suであれば、ユーザのパスワードの他にrootのパスワードも手に入れなければならないため。(ただし、その様に運用するのであれば、コンソールも含めrootでは一切ログイン出来ない様にすべきだろう。rootになるためには必ずsuコマンドを利用するように強制させる。)さらにセキュリティを高めるのであれば、vncサーバを起動するためだけの特権コマンドを作る方法もある。


次にVNCクライアントを使ってアクセスサーバにアクセスする。通常に使えば良いのだが、接続先はアクセスサーバのIPアドレスではなく"localhost"になる。

パスワードを入れればリモートにあるアクセスサーバのDesktopが現れる。

localhostを指定したのにリモートのマシンのデスクトップが現れるのは面白い。SSHポートフォワーディングを使ったVNCの設定は以上である。

余談だが、VNC Viewerや他の多くのVNCクライアントソフトでは、有償の商用版であればEncryption機能をもっているのだが、無償バージョンはencryption機能がないものが多い。暗号化機能が無いということはインターネットを経由して使うと、キーボードのイベントや画面の情報がパケットキャプチャで取ろうとすれば取れることになる。しかし、この様にSSHポートフォワーディングと組み合わせることによって、全ての情報が暗号化してやり取りされるので、インターネット経由のVNCの利用もセキュリティを高めることができる。
また、上の例でsuコマンドでrootに切替えているが、個人的にはSSHポートフォワーディングをつかって、リモートのマシンとの間で更にSSHセションを確立し、そこで特権ユーザの操作をしている。つまり2重に暗号化されている。(テキストベースのCLIであれば、2重に暗号化しても大したオーバーヘッドにはならない。)