読者です 読者をやめる 読者になる 読者になる

彼女からは、おいちゃんと呼ばれています

ウェブ技術や日々考えたことなどを綴っていきます

さくら VPS に VNC と GNOME を入れて、Mac から接続する(SSH ポートフォワーディング含む)

Linux Mac

さくら VPSvnc-server と GNOME デスクトップを入れて Mac から接続してみました。下記のように GUI で操作できます。

さくら VPS はサーバ用途で使っている人がほとんどだと思うので、どれだけ需要があるかは分かりませんが、メモしておきます。ちなみにさくら VPS の OS は CentOS 5.5、クライアントは MacOSX 10.6 Snow Leopard です。

少し長いので目次から。

さくら VPSVNCGNOME を入れて、Mac から接続する方法(SSH ポートフォワーディング含む)

  1. vnc-server 及び GNOME デスクトップのインストール
  2. VNC 接続用ユーザの作成
  3. ディスプレイ番号、ユーザ、画面サイズ等の設定
  4. vnc-server 起動時の設定
  5. vnc-server のサービス再起動
  6. サーバ起動時に vnc-server も起動するようにする
  7. Mac から VNC 接続(暗号化なし)
  8. Mac から VNC 接続(SSH ポートフォワーディング)

1. vnc-server 及び GNOME デスクトップのインストール

サーバ側で yum groupinstall コマンドを使って vnc-server と GNOME デスクトップをインストールします。念のため、事前にグループ名の確認をば。

# yum grouplist 
...
   GNOME Desktop Environment
...
   X Window System
...

下記コマンドを root 権限で実行します。なお「vnc-server」は「X Window System」の中に含まれています。

# yum groupinstall "X Window System" "GNOME Desktop Environment"
...(5-10分くらいかかります)

2. VNC 接続用ユーザの作成

VNC で接続するためのユーザを作成します。ここでは例として user01 を作成しています。既に存在するユーザで接続する場合にはこのステップは必要ありません。

# useradd user01
# passwd user01
Changing password for user user01.
New UNIX password:(パスワードを入力)
Retype new UNIX password:(パスワードを再度入力)
passwd: all authentication tokens updated successfully.

3. ディスプレイ番号、ユーザ、画面サイズ等の設定

vnc-server の設定ファイルを編集します。ここで画面サイズなどを設定できます。

# vi /etc/sysconfig/vncservers

設定ファイル中に下記を追記してください

VNCSERVERS="1:user01"  ## ディスプレイ番号:VNC を利用するユーザ名
VNCSERVERARGS[1]="-geometry 1024x768 -nohttpd"  ## ディスプレイ番号、画面サイズ、パラメータ

パラメータの内容は(設定ファイル中にも書かれていますが)下記のとおりです。

-nolisten tcp
TCP 接続をさせない
-nohttpd
Web ベースの VNC クライアントからの接続をさせない
-localhost
リモート接続をさせない

なお、VNC クライアントから接続時に用いる TCP ポート番号は「5900 + ディスプレイ番号」となります。上記設定では 5901 です。

(設定ファイル /etc/sysconfig/vncservers)
# The VNCSERVERS variable is a list of display:user pairs.#
# Uncomment the lines below to start a VNC server on display :2
# as my 'myusername' (adjust this to your own).  You will also
# need to set a VNC password; run 'man vncpasswd' to see how
# to do that.
#
# DO NOT RUN THIS SERVICE if your local area network is
# untrusted!  For a secure way of using VNC, see
# <URL:http://www.uk.research.att.com/archive/vnc/sshvnc.html>.

# Use "-nolisten tcp" to prevent X connections to your VNC server via TCP.

# Use "-nohttpd" to prevent web-based VNC clients connecting.

# Use "-localhost" to prevent remote VNC clients connecting except when
# doing so through a secure tunnel.  See the "-via" option in the
# `man vncviewer' manual page.

# VNCSERVERS="2:myusername"
# VNCSERVERARGS[2]="-geometry 800x600 -nolisten tcp -nohttpd -localhost"

## 設定を追記
VNCSERVERS="1:user01"  ## ディスプレイ番号: VNC 接続ユーザ名
VNCSERVERARGS[1]="-geometry 1024x768 -nohttpd"  ## ディスプレイ番号、画面サイズ、パラメータ

4. vnc-server 起動時の設定

VNC を利用するユーザに切り替えて VNC サーバを起動します。初回起動時に起動設定ファイルが作成されます。

# su user01
$ vncserver :1  ## :1 はディスプレイ番号

You will require a password to access your desktops.

Password:
Verify:
xauth:  creating new authority file /home/inouetakuya/.Xauthority

New 'www00000.sakura.ne.jp:1 (user01)' desktop is www00000u.sakura.ne.jp:1

Creating default startup script /home/user01/.vnc/xstartup
Starting applications specified in /home/user01/.vnc/xstartup
Log file is /home/user01/.vnc/www00000u.sakura.ne.jp:1.log

次に、作成された起動設定ファイルを編集し、GNOME が利用できるようにします。

$ vi .vnc/xstartup

下記のとおり編集してください。

#!/bin/sh

# Uncomment the following two lines for normal desktop:
# unset SESSION_MANAGER
# exec /etc/X11/xinit/xinitrc

[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup
[ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources
xsetroot -solid grey
vncconfig -iconic &

## 下記 2行をコメントアウト
# xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
# twm &

## 下記を追加
gnome-session &

5. vnc-server のサービス再起動

起動時の設定ファイルを編集したので、vnc-server のサービスを再起動します(root 権限で)

$ su -
Password: 
# service vncserver restart
Shutting down VNC server: 1:user01                         [  OK  ]
Starting VNC server: 1:user01 
New 'www00000u.sakura.ne.jp:1 (user01)' desktop is www00000u.sakura.ne.jp:1

Starting applications specified in /home/user01/.vnc/xstartup
Log file is /home/user01/.vnc/www00000u.sakura.ne.jp:1.log

                                                           [  OK  ]

6. サーバ起動時に vnc-server も起動するようにする

何らかの理由でサーバを再起動させたときにいちいち vnc-server を手動で起ち上げるのも面倒なので、自動で起動するようにしておきます。

# chkconfig vncserver on    ## root 権限
# chkconfig --list vncserver    ## 念のため確認
vncserver      	0:off	1:off	2:on	3:on	4:on	5:on	6:off

7. Mac から VNC 接続(暗号化なし)

さて、いよいよ Mac から接続します。フツーに(暗号化せずに)VNC サーバへ接続するだけならば、Mac 標準の「画面共有」で事足ります。

Finder のメニューから「移動 > サーバへ接続」。サーバアドレス欄に

vnc://(サーバのホスト名または IP アドレス):TCP ポート番号

を入力して「接続」をクリックします。

途中でパスワードを訊かれますので、VNC を利用するユーザ(ここでは user01)のパスワードを入力します。

暗号化してないので、確認ダイアログが表示されます。ここでは「接続」を選択。

GUI のデスクトップが表示されたら接続成功です。なお、接続を終了するときは、画面共有メニューの「接続 > 閉じる」をしてください。


(おまけ)

余談ですが、Windowsリモートデスクトップ接続と同じ感覚でユーザのログアウトをすると、デスクトップアイコンが非表示になったまま、にっちもさっちもいかなくなりました(vnc-server のサービス再起動をすれば大丈夫です)

(サーバ側で root で下記コマンドを実行)
# service vncserver restart

8. Mac から VNC 接続(SSH ポートフォワーディング)

さて、ここまでで一応 VNC で接続できるようになったものの、通信が暗号化されていないのでいささか不安が残ります。

そこで、SSH ポートフォワーディングという技術の出番です。サーバへ SSH へトンネルをつくり、通信はそこを利用します。下記のようなイメージです。

まずは、Mac からサーバへ SSH でトンネルを作成します。Mac のターミナルを起動して下記コマンドを実行してください。なお、コマンド中の 10022 というのは Mac 側の任意のポート番号です。トンネリングするときに使います。

$ ssh -L 10022:xxx.xxx.xxx:5901 user01@xxx.xxx.xxx

$ ssh -L (クライアント側の任意のポート番号):(サーバのホスト名または IP アドレス):(サーバ側のポート番号) (接続ユーザ名)@(サーバのホスト名または IP アドレス)

そして、SSH のトンネルを通って VNC サーバへ接続、したいところですが、Mac の画面共有では SSH ポートフォワーディングできませんでした(下記のメッセージがひょうじされました)

代わりに MacVNC クライアントの定番「Chicken of VNC」をインストールします。

インストール後、アプリを起動して「Connection > New Connection」

Host: localhost:10022(先ほど指定した任意のポート番号)
Password: VNC を利用するユーザ(ここでは user01)のパスワード

上記を入力して「接続」をクリック。

おぉ!きました!

ちなみに僕がいま使っているのは「さくらの VPS 512」という一番安いプランですが、同じ Mac に入れている VMWare Fusion 4 の Windows 7 と同じくらい、ストレスなく動作してくれています(あまり重い処理はやっていませんが)

以上です。よろしければ参考にしてください。ではでは。