このページでは、「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ポートフォワーディングを行うなら
このサービスは開ける必要は無いことなどが記載されていました。
再起動などで設定を元に戻す場合(一時的にポート開放するだけ)であれば
--permanentオプションは必要ありません。
※またはゾーンにポートを追加する
・iptablesの場合
iptablesでtcp/5901への通信は許可と設定します。
※接続元(自宅)は動的グローバルIPアドレスですが、そんなにころころ
IPアドレスが変わらないためよりセキュアに接続元IPアドレスも指定しました。
vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state --state NEW -m tcp -s 接続元IPアドレス --dport 5901 -j ACCEPT
systemctl restart iptables
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使用ユーザーにログインしてから実施しましょう。
パスワード設定後、また「su -」でrootでの操作になります。
systemctl daemon-reload
systemctl enable vncserver@:1.service
systemctl start vncserver@:1.service
起動等のsystemd全般のログは「journalctl -xn」で確認可能です。
※前項のVNC起動ユーザではなくrootでVNCサーバを起動するには
または
など。この時、パスワードも設定します。
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のインストールが必要です。
netstat -anp
※ss -lntpでも確認できます。
デスクトップ環境がGNOMEの場合は本項目は必要有りません。
「systemctl star vncserver@:1.service」でVNCをユーザーで
稼働起動させた場合は
※「vncserver」でVNCをrootで稼働させた場合は
最後の1はディスプレイ番号を表しています。
リモートではなく普通に対面でCentOSを操作する場合は「^/.bashrc」だったか
「~/.xinitrc」だったかの編集かと思います。
vi /home/VNCを稼働したユーザー名/.vnc/xstartup
VNCをユーザーで起動する場合は
※「vncserver」でVNCをrootで稼働させる場合は
GUI環境での日本語化やアプリケーションのインストール方法については以下のページに記載しました。
接続元(WindowsやLinux)でUltraVNCをダウンロードします。
ダウンロードページ
インストール後UltraVNC Viewerを起動します。
接続先は、「CentOS7のIPアドレス:ディスプレイ番号」です。
vncserverの起動時に設定したパスワードを入力します。
ServersMan@VPS(メモリ1GB)へのVNC接続。殆ど何もインストールしていない
からか、かなり快適です。遠隔で仮想OSを操作していると思えないくらい早いです。
何のタイムラグも無く、自宅のPCの操作速度かそれ以上に早いです。
メモリ使用量。
自宅のCentOSへのVNC接続
ServersMan@VPS(メモリ1GB)へのVNC接続。真っ暗のままでした。
再起動すると応答不可となりました。メモリが少ないサーバではXfceが良いですね。
メモリをフルに使用しています。スワップも発生しています。
ServersMan@VPS(メモリ1GB)へのVNC接続。メモリをフルに使用しています。
スワップも発生しています。5秒くらい遅延があります。再起動すると応答不可
となりました。メモリが少ないサーバではXfceが良いですね。
VPSサーバへ暗号化無しで接続するのは安全では有りません。
そのため、SSHトンネルを張って、その中でVNC通信を流します。
事前にファイアウォールで(iptablesまたはfirewalld)はtcp/5901は閉じ、SSH接続ポート
(通常はtcp/22、ServersMan@VPSの初期設定ではtcp/3843)のみの開放にしましょう。
コマンドでSSHポートフォワードを行うには、先程のvncserverの
設定ファイルに記載が有りましたね。
今回はTeratermのiniファイルに設定します。
「設定」→「SSH転送」をクリックします。
「追加」をクリックします。
ローカルのポートに任意のポート番号、
リモート側ホストにVNCサーバのIPアドレス、ポートにVNCサーバのポート番号
(ディスプレイ番号が1で有れば5901)を入力し「OK」をクリックします。
「OK」をクリックします。
「設定」→「設定の保存」をクリックします。
SSH接続時、常にこのSSH転送を使用する場合はTERATERM.iniの上書きで
良いかと思います。または別名で保存して、毎回設定の読み込みを行っても良いです。
VNCサーバへ、まずはSSH接続でログインします。(=SSHトンネルを張ります。)
※SSHアクセスが有った時点で、メールを送信する仕組みにしておくと、より
セキュアな環境になるかもしれないですね。その方法を記載している方が
おられました。
netstatを実行すると正しくtcp/5555が開いていました。プロセス名はテラタームです。
VNCビューアを起動し「localhost::5555」へ接続します。
VNCで設定したパスワードを入力しログインします。
SSHトンネルを通り、正しくVNCサーバへ接続できました。
接続先情報は「localhost::5555」と表示されていますね。
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以上の任意のポート。)
Destination Host: VNCサーバのIPアドレス
Destination Port: 5901 (VNCサーバの待ち受けポート)
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サーバへ接続出来ました。