さくらVPSのVNCコンソールの実装

使っているのはsshのtunnel経由でVNC接続するtightvnc。

このhtml ソースのappletのところ。

  <param name="SSHHOST" value="vnc@210.224.172.110" />
  <param name="HOST" value="localhost" />
  <param name="PORT" value="******" />
  <param name="PASSWORD" value="*******" />

ssh-java-vnc-viewer はssh portが指定できなくて22番で固定??

% host 210.224.172.110
110.172.224.210.in-addr.arpa domain name pointer vpsgw1.sakura.ad.jp.
% host 210.224.172.111
111.172.224.210.in-addr.arpa domain name pointer vpsgw2.sakura.ad.jp.

このserverにssh接続させて、そのtunnel経由でlocalhostのportにvnc接続させているらしい。(vncユーザのsshはパスワードなしでログイン可能でIP制限してないっぽい)
また、PORT, PASSWORDは接続するたびにランダムで変っている模様。

普通のkvmの構成だと、vncがlocalportで動いている = 仮想ホストOSってことになるけど、2台だけで動いてるわけないし、vpsgw1,vpsgw2 からさらにport forward 的なことをしているのかな?

追記

ちなみに同じようなことを実装しようとした場合、

  • sshd: vnc ユーザ外はパスワード認証を不可にする
    • Match User vncvncユーザだけパスワード認証を許可する
  • passwd: vnc ユーザにはポートフォワードのみでコマンドは実装させないようにshellを/bin/false などにする
  • 任意の宛先にフォワードされないように、outboundをfwで制限する
  • ランダムで割り当てたポートには、Web認証でログイン済みのリモートIPからしかアクセスさせない (どやって?

などなど色々考えないといけないですね。俺みたいなへっぽこエンジニアにはとうていクリアできそうにないので、せめてvncユーザのsshはfirewall/tcp wrapper でアクセス制限すれば同じようなことができるかな。