デスクトップUbuntuにVNC接続。SSHを活用してセキュアに接続する

執筆日:

更新日:

こんにちは。もーすけです。
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側でデスクトップ共有の設定をします。
「デスクトップの共有」のアプリケーションを起動します。

f:id:mosuke5:20150809132410p:plain

接続毎に要求するようにすると、サーバ側で毎度許可が必要なので、オフにします。
同じLANをつかんでる人にVNC接続されてしまわないように、パスワードはきちんと設定しておきましょう。

f:id:mosuke5:20150809132421p:plain

もし、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アドレスを入れれば接続できます。

f:id:mosuke5:20150812225515p:plain
f:id:mosuke5:20150812225126p:plain

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接続ができます。

f:id:mosuke5:20150812224539p:plain

これでセキュアなVNCの完成です。
このようにすることで、VNCの接続経路をSSHでトンネリングすることで暗号化されます。また、SSHであれば公開鍵認証方式で接続できるので、パスワードという脆弱なものを利用しなくてすみます。ファイアウォールの設定もSSHさえ通っていれば十分なため外部からの攻撃にも強くなります。
UbuntuでのVNCを行う人はぜひSSHローカルポートフォワーディングも一緒に覚えて利用してみてください。

記事の内容に関連した相談、仕事依頼したい New

記事の内容やクラウドネイティブ技術に関する相談、仕事依頼を開始しました。
仕事依頼、相談をしてみる

フィードバック

本記事に対して、フィードバックあればこちらのフォームからご記入ください。
記事の内容にフィードバックしてみる

このエントリーをはてなブックマークに追加