こんにちは。もーすけです。
UbuntuのデスクトップにVNCを使ってリモートデスクトップを行う方法を紹介します。またその際に、SSHを活用してセキュアに接続することを行ってみます。
実践したこと
最近、自作したPCにUbuntuをインストールして使っているのだけど、 デスクトップPCなので、部屋でしか操作することができません。他の部屋から(あるいは、応用して外出先から)Ubuntuを触れたらいいなーと思いVNCを利用してその環境を整えることをしました。
主に説明することは以下の通りです。
- VNCサーバ構築
- ノートPC(Mac)からのVNC接続について
- SSHローカルポートフォワードを使ってのセキュアな接続
UbuntuでのVNCサーバ構築について
今回利用しているUbuntuは「Ubuntu Desktop 14.04」です。
また、VNCの実現は標準でインストールされているvinoを使って行いました。
ご存知の方も多くいるかもしれませんが、vinoでのVNCは簡易的なもので、サーバ側のユーザがログアウトしていると使えません。ですので、本格的なリモートデスクトップとしては不十分かと思います。しかし、ここで説明することは他のVNC利用時にも応用できることも書いてありますので参考にしてください。 また、ユーザーをログアウトせずにロック状態にしていれば問題なく使えます。
まずはUbuntu側でデスクトップ共有の設定をします。
「デスクトップの共有」のアプリケーションを起動します。
接続毎に要求するようにすると、サーバ側で毎度許可が必要なので、オフにします。
同じLANをつかんでる人にVNC接続されてしまわないように、パスワードはきちんと設定しておきましょう。
もし、MacからVNC接続をした際に、「互換性のないバージョンです」とエラーが出てきてしまった場合には下記を設定しましょう。
$ gsettings set org.gnome.Vino require-encryption false
設定ができたら、きちんとサーバとしてVNC接続を待ち受けているか確認します。プロセスが立ち上がっているかどうかと、ポートがListenしているかどうかを確認してみます。また、iptablesやfirewalldなどのファイアウォールを設定している方は外部からの接続ができる状態か確認しましょう。
% ps -ef | grep vino
mosuke5 24414 24226 0 12:30 ? 00:00:21 /usr/lib/vino/vino-server --sm-disable
mosuke5 25456 24470 0 13:19 pts/11 00:00:00 grep vino
% sudo lsof -i:5900
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
vino-serv 24414 mosuke5 13u IPv6 156661 0t0 TCP *:5900 (LISTEN)
vino-serv 24414 mosuke5 14u IPv4 156662 0t0 TCP *:5900 (LISTEN)
MacからVNC接続する
Macには実は標準でVNCクライアントがついています。
特別なソフトウェアをインストールすることなくVNC接続できます。「移動」→「サーバへ接続」を選択し、vncプロトコルで対象のサーバのIPアドレスを入れれば接続できます。
SSHローカルフォワードを使ってセキュアな通信をする
さて、VNC接続できたわけですが、このままで本当にいいのでしょうか?外部のネットワークから接続する場合などもこのセキュリティでいいでしょうか?
VNCプロトコルは通信の内容を暗号化しません。telnetと同様で、非常に危険です。
複数の人がいるネットワーク環境や、外部からの接続を考慮して、SSHのローカルフォワードを利用してセキュアにVNC接続する方法を紹介します。
以前に、SSHのローカルフォワードについてはまとめましたのでぜひ読んでみてください。
まずは、ローカルフォワードのSSH接続を行います。MacからUbuntuに向かってのSSH接続です。
下記のコマンドの意味は「自分の端末のポート8888に来た通信は、192.168.11.5からみてlocalhostのポート5900にとばします」です。
`192.168.11.5`はUbuntuのIPアドレスと考えてください。
$ ssh -L8888:localhost:5900 [email protected]
上のコマンドでSSH接続した状態でなら、localhostのポート8888に接続するとUbuntuへVNC接続ができます。
これでセキュアなVNCの完成です。
このようにすることで、VNCの接続経路をSSHでトンネリングすることで暗号化されます。また、SSHであれば公開鍵認証方式で接続できるので、パスワードという脆弱なものを利用しなくてすみます。ファイアウォールの設定もSSHさえ通っていれば十分なため外部からの攻撃にも強くなります。
UbuntuでのVNCを行う人はぜひSSHローカルポートフォワーディングも一緒に覚えて利用してみてください。