MENU

ServersMan@VPS(CentOS7) VNCでリモートデスクトップとWindows/AndroidでSSHポートフォワード方法

このページでは、「VPSサーバへSSH接続後、リモートデスクトップ接続を
行う方法」を紹介しています。

 

VNCでのリモートデスクトップ接続と、SSHポートフォワードでの
VNCリモートデスクトップ接続の方法です。
DTI ServersMan@VPSのEntryプラン/CentOS7/シンプルセットで実施しました。

 

事前にデスクトップ環境(Xfce、KDE、GNOME)のインストールを行って下さい。
インストール方法は以下のページに記載しました。

 

また、本ページと似たようなページとしては以下のページが有ります。
自宅がWindows1台のみの環境で、外出先からSSH転送しVNCでリモート接続する方法です。

 

PCやスマートフォンなどのSSHクライアントから、自宅のSSHサーバ(Windows、Linux)へアクセスし、その後VNCでリモートデスクトップ接続する方法

 

 

本ページの目次

 

 

ファイアウォールの設定

インターネットを経由しVNCを利用する場合はSSHのポートフォワーディング機能を
使用するため、最終的には以下のポート(tcp/5901など)は閉じますが、
まずはSSHを使用しない接続を試行するため一旦開けます。

 

本サイト内のCentOSのファイアウォールの設定方法を記載したページ

 

・firewalldの場合

 

VNCサーバは、1サービスとして0〜3のディスプレイ番号が
firewalldに登録されています。tcp/5900-5903が開きます

 

cat /usr/lib/firewalld/services/vnc-server.xml

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>Virtual Network Computing Server (VNC)</short>
  <description>A VNC server provides an external accessible X session. 
Enable this option if you plan to provide a VNC server with direct access. 
The access will be possible for displays :0 to :3. 
If you plan to provide access with SSH, do not open this option and use 
the via option of the VNC viewer.</description>
  <port protocol="tcp" port="5900-5903"/>
</service>

 

ディスプレイ番号0〜3が開くこと、SSHポートフォワーディングを行うなら
このサービスは開ける必要は無いことなどが記載されていました。

 

 

■ゾーンにサービスを追加する
firewall-cmd --zone=ゾーン名(publicやdmzなど) --add-service=vnc-server --permanent

 

再起動などで設定を元に戻す場合(一時的にポート開放するだけ)であれば
--permanentオプションは必要ありません。

 

※またはゾーンにポートを追加する

firewall-cmd --zone=ゾーン名(publicやdmzなど) --add-port=5901/tcp --permanent

 

■動的に反映する
firewall-cmd --reload

 

■全ゾーンの設定値の確認
firewall-cmd --list-all-zones

 

 

 

・iptablesの場合

 

iptablesでtcp/5901への通信は許可と設定します。

※接続元(自宅)は動的グローバルIPアドレスですが、そんなにころころ

IPアドレスが変わらないためよりセキュアに接続元IPアドレスも指定しました。

 

■/etc/sysconfig/iptablesの設定追加

vi /etc/sysconfig/iptables

-A INPUT -p tcp -m state --state NEW -m tcp -s 接続元IPアドレス --dport 5901 -j ACCEPT

 

■iptablesの再起動

systemctl restart iptables

 

 

 

VNC Serverのインストール
yum install vnc-server

 

 

 

VNCで起動させるユーザーの設定

rootで起動させる場合は本項目の設定は必要ありませんが
特にインターネットを経由するVNC接続時やSSHポートフォワード時に
rootで接続するのは良くありませんので、設定を行っておきましょう。

 

※VNCサーバの運用方法は/lib/systemd/system/vncserver@.serviceに
記載されています。SSHポートフォワードで利用すること、との記載も有ります。

do not run this service if your local area network is untrusted!
For a secure way of using VNC, you should limit connections to the local host and then tunnel from the machine you want to view VNC on (host A) to the machine whose VNC output you want to view (host B)

 

[user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB

 

this will open a connection on port 590N of your hostA to hostB,s port 590M(in fact, it ssh-connects to hostB and then connects to localhost (on hostB).See the ssh man page for details on port forwarding)

 

You can then point a VNC client on hostA at vncdisplay N of localhost and with the help of ssh, you end up seeing what hostB makes available on port 590M

 

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

 

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.

 

■設定ファイルのコピー

cp /lib/systemd/system/vncserver@.service /etc/systemd/system/vncserver@\:1.service

 

※「1」はディスプレイ番号です。1人だけでVNCを使用する場合は「1」で
良いかと思います。

 

■設定ファイルの編集

vi /etc/systemd/system/vncserver@\:1.service

 

<USER>をユーザー名に変更します。

 

■VNCのパスワード設定

上記のVNC使用ユーザーにログインしてから実施しましょう。
パスワード設定後、また「su -」でrootでの操作になります。

 

su ユーザー名
vncpasswd

 

■デーモンのリロード

systemctl daemon-reload

 

■自動起動設定

systemctl enable vncserver@:1.service

 

 

 

VNCの起動

 

■vncserver@:1.serviceの起動

systemctl start vncserver@:1.service

 

起動等のsystemd全般のログは「journalctl -xn」で確認可能です。

 

※前項のVNC起動ユーザではなくrootでVNCサーバを起動するには

vncserver

または

vncserver -geometry 800x600

など。この時、パスワードも設定します。

You will require a password to access your desktops.

 

Password:
Verify:

 

New 'dti-vps-srv94:1 (root)' desktop is dti-vps-srv94:1

 

Creating default startup script /root/.vnc/xstartup
Starting applications specified in /root/.vnc/xstartup
Log file is /root/.vnc/dti-vps-srv94:1.log

 

表示されたログの最終行、「Log file is /root/.vnc/dti-vps-srv94:1.log」
の「1」はディスプレイ番号です。

 

接続元のUltraVNC Viewerからリモート接続に使用するポートは5900+ディスプレイ
番号なので5901です。netstatで確認すると正しくVNCがtcp/5901で待ち受けていました。

 

※ifconfigやnetstatを使用するにはnet-toolsのインストールが必要です。

 

yum install net-tools

 

netstat -anp

 

※ss -lntpでも確認できます。

 

 

 

VNCで起動させるデスクトップ環境の設定

デスクトップ環境がGNOMEの場合は本項目は必要有りません。

 

■vncserverの停止

 

「systemctl star vncserver@:1.service」でVNCをユーザーで
稼働起動させた場合は

systemctl stop vncserver@:1.service

 

※「vncserver」でVNCをrootで稼働させた場合は

vncserver -kill :1

最後の1はディスプレイ番号を表しています。

 

■xstartupファイルの編集

リモートではなく普通に対面でCentOSを操作する場合は「^/.bashrc」だったか
「~/.xinitrc」だったかの編集かと思います。

 

vi /home/VNCを稼働したユーザー名/.vnc/xstartup

#exec /etc/X11/xinit/xinitrc ※コメントアウトする。

 

exec xfce4-session & ※xfceの場合に追加する。

 

startkde & ※KDEの場合に追加する。

 

■vncserverの起動

 

VNCをユーザーで起動する場合は

systemctl start vncserver@:1.service

 

※「vncserver」でVNCをrootで稼働させる場合は

vncserver

 

GUI環境での日本語化やアプリケーションのインストール方法については以下のページに記載しました。

 

 

 

UltraVNCビューアのインストールとリモートデスクトップ接続

接続元(WindowsやLinux)でUltraVNCをダウンロードします。

 

ダウンロードページ

 

インストール後UltraVNC Viewerを起動します。

 

接続先は、「CentOS7のIPアドレス:ディスプレイ番号」です。

例 27.120.2.2:1

 

 

vncserverの起動時に設定したパスワードを入力します。

 

 

 

■Xfceで接続した場合

ServersMan@VPS(メモリ1GB)へのVNC接続。殆ど何もインストールしていない
からか、かなり快適です。遠隔で仮想OSを操作していると思えないくらい早いです。
何のタイムラグも無く、自宅のPCの操作速度かそれ以上に早いです。

 

 

 

メモリ使用量。

 

 

 

■KDEで接続した場合

 

自宅のCentOSへのVNC接続

 

 

 

ServersMan@VPS(メモリ1GB)へのVNC接続。真っ暗のままでした。
再起動すると応答不可となりました。メモリが少ないサーバではXfceが良いですね。

 

 

 

メモリをフルに使用しています。スワップも発生しています。

 

 

 

■GNOMEで接続した場合

ServersMan@VPS(メモリ1GB)へのVNC接続。メモリをフルに使用しています。
スワップも発生しています。5秒くらい遅延があります。再起動すると応答不可
となりました。メモリが少ないサーバではXfceが良いですね。

 

 

 

SSHポートフォワードでのVNC接続

VPSサーバへ暗号化無しで接続するのは安全では有りません。
そのため、SSHトンネルを張って、その中でVNC通信を流します。

 

 

■ファイアウォール設定

事前にファイアウォールで(iptablesまたはfirewalld)はtcp/5901は閉じ、SSH接続ポート
(通常はtcp/22、ServersMan@VPSの初期設定ではtcp/3843)のみの開放にしましょう。

 

 

■TeraTermのSSH転送設定

コマンドでSSHポートフォワードを行うには、先程のvncserverの
設定ファイルに記載が有りましたね。

[user@hostA ~]$ ssh -v -C -L 590N:localhost:590M hostB

 

今回はTeratermのiniファイルに設定します。

 

「設定」→「SSH転送」をクリックします。

 

 

 

「追加」をクリックします。

 

 

 

ローカルのポートに任意のポート番号、
リモート側ホストにVNCサーバのIPアドレス、ポートにVNCサーバのポート番号
(ディスプレイ番号が1で有れば5901)を入力し「OK」をクリックします。

 

 

 

「OK」をクリックします。

 

 

 

「設定」→「設定の保存」をクリックします。

 

 

 

SSH接続時、常にこのSSH転送を使用する場合はTERATERM.iniの上書きで
良いかと思います。または別名で保存して、毎回設定の読み込みを行っても良いです。

 

 

 

VNCサーバへ、まずはSSH接続でログインします。(=SSHトンネルを張ります。)

※VNCサーバを稼働しているユーザーでログインしましょう。

 

※SSHアクセスが有った時点で、メールを送信する仕組みにしておくと、より
セキュアな環境になるかもしれないですね。その方法を記載している方が
おられました。

 

[CentOS] SSHログイン時にメール通知する設定

 

 

 

 

netstatを実行すると正しくtcp/5555が開いていました。プロセス名はテラタームです。

 

 

 

VNCビューアを起動し「localhost::5555」へ接続します。

 

 

 

VNCで設定したパスワードを入力しログインします。

 

 

SSHトンネルを通り、正しくVNCサーバへ接続できました。
接続先情報は「localhost::5555」と表示されていますね。

 

 

 

AndroidでのSSHポートフォワードでVNC接続

 

SSHでのポート転送はServerauditorを使用しました。
他にもConnectBot等でも良いですね。
ConnectBotについてや、WindowsのSSHサーバについては以下のページに記載しました。

 

Serverauditorのダウンロードページ

 

左上のメニューを押し、「Hosts」を押します。

 

 

 

VNCサーバへのSSH接続設定を作成します。ユーザは、VNCサーバを
稼働させているユーザを指定しましょう。

 

 

 

左上のメニューを押し、「Port Forwarding」を押します。

 

 

 

以下のように設定します。

Port Forwarding Type: Local

 

Local Host: 先ほど作成したVNCサーバへの接続設定

 

Local Port: 5901 (このAndroidで開けるポート。1024以上の任意のポート。)

※VNCビューアソフトによっては5901にしておいた方が良いソフトも有ります。

 

Destination Host: VNCサーバのIPアドレス

 

Destination Port: 5901 (VNCサーバの待ち受けポート)

※VNCサーバで設定するディスプレイ番号次第ですが、基本的には5901で良いです。

 

Bound Address(Optional): 127.0.0.1 (空欄でも127.0.0.1がセットされたかと思います。)

 

 

 

「▼」をクリックし「Connect」を押します。

 

 

 

Android Terminal Emulatorにて
netstatを実行すると正しく127.0.0.1:5901で待ち受けていました。

 

VNCビューアをインストールします。VNC Client Freeを使用しました。

 

ダウンロードページ

 

 

 

以下のように設定し、「Connect」をクリックします。

ニックネーム: 任意の文字列

 

パスワード: VNCサーバで入力したパスワード

 

アドレス: 127.0.0.1

 

ポート: 5901 (このAndroidで開けたポート。)

 

 

 

VNCサーバへ接続出来ました。

 

 

 

↓現在、この467円のServersManのVPSを使用しています。
サーバを色々操作できてこの安さは凄いと思います。
色々なサーバ(メール、DNS等)を作りましたが、結構快適です。