一部のユーザーは、リモートデスクトップサービスを実行するために比較的安価なWindowsVPSをレンタルしています。Linuxでも、データセンターに独自のハードウェアを配置したり、専用サーバーをレンタルしたりしなくても、同じことができます。誰かがテストと開発のための使い慣れたグラフィカル環境、またはモバイルデバイスから作業するための広い帯域幅を備えたリモートデスクトップを必要としています。Remote FrameBuffer(RFB)プロトコルに基づく仮想ネットワークコンピューティング(VNC)には多くの用途があります。短い記事では、ハイパーバイザーを備えた仮想マシンで構成する方法を紹介します。
目次:
VNCサーバーの選択
インストールと構成
systemdを介したサービスの開始
デスクトップへの接続
VNCサーバーの選択
VNCサービスは仮想化システムに組み込むことができ、ハイパーバイザーはそれをエミュレートされたデバイスに接続し、追加の構成は必要ありません。このオプションはかなりのオーバーヘッドを伴い、すべてのプロバイダーでサポートされているわけではありません。リソースをあまり消費しない実装でも、実際のグラフィックスデバイスをエミュレートする代わりに簡略化された抽象化(フレームバッファー)が仮想マシンに転送される場合です。VNCサーバーが実行中のXサーバーにバインドされている場合もありますが、この方法は物理マシンへのアクセスに適していますが、仮想マシンでは多くの技術的な問題が発生します。最も簡単な方法は、Xサーバーが組み込まれたVNCサーバーをインストールすることです。物理デバイス(ビデオアダプタ、キーボード、マウス)やハイパーバイザーを使用したそれらのエミュレーションを必要としないため、あらゆるタイプのVPSに適しています。
インストールと構成
デフォルト構成でUbuntuServer 18.04LTSを備えた仮想マシンが必要です。このディストリビューションの標準リポジトリには、TightVNC、TigerVNC、x11vncなどのいくつかのVNCサーバーがあります。TightVNC開発者によってサポートされていない実際のフォークであるTigerVNCに落ち着きました。他のサーバーも同様に構成されます。また、デスクトップ環境を選択する必要があります。コンピューティングリソースの要件が比較的低いため、XFCEが最適なオプションになると考えています。興味のある人は別のDEまたはWMをインストールできます。それはすべて個人の好みに依存しますが、ソフトウェアの選択はRAMとコンピューティングコアの必要性に直接影響します。
すべての依存関係を持つデスクトップ環境のインストールは、次のコマンドで実行されます。
sudo apt-get install xfce4 xfce4-goodies xorg dbus-x11 x11-xserver-utils
次に、VNCサーバーをインストールする必要があります。
sudo apt-get install tigervnc-standalone-server tigervnc-common
ルートとして実行することは悪い考えです。ユーザーとグループを作成します。
sudo adduser vnc
管理関連のタスクを解決できるように、ユーザーをsudoグループに追加しましょう。そのような必要がない場合は、次の手順をスキップできます。
sudo gpasswd -a vnc sudo
次のステップは、vncユーザー権限でVNCサーバーを起動して、〜/ .vnc /ディレクトリに安全なパスワードと構成ファイルを作成することです。パスワードの長さは6〜8文字です(余分なものは切り捨てられます)。必要に応じて、表示専用のパスワードも設定されます。キーボードとマウスにアクセスせずに。次のコマンドは、vncユーザーとして実行されます。
su - vnc
vncserver -localhost no
デフォルトでは、RFBプロトコルはTCPポート範囲5900〜5906を使用します。それぞれがXサーバー画面に対応する表示ポート。この場合、ポートは0から6までの画面に関連付けられています。開始したVNCサーバーインスタンスは、ポート5901でリッスンしています(画面:1)。他のインスタンスは、画面が2、3などのその他のポートで動作できます。さらに構成する前に、サーバーを停止する必要があります。
vncserver -kill :1
このコマンドは、「XtigervncプロセスID 18105を強制終了しています...成功しました!」というメッセージを表示するはずです。
TigerVNCが起動すると、〜/ .vnc / xstartupスクリプトを実行して構成パラメーターを設定します。既存のスクリプトのバックアップコピーが存在する場合は、以前に保存して、独自のスクリプトを作成しましょう。
mv ~/.vnc/xstartup ~/.vnc/xstartup.b
nano ~/.vnc/xstartup
XFCEデスクトップ環境セッションは、次のxstartupスクリプトによって開始されます。
#!/bin/bash
unset SESSION_MANAGER
unset DBUS_SESSION_BUS_ADDRESS
xrdb $HOME/.Xresources
exec /usr/bin/startxfce4 &
VNCがホームディレクトリの.Xresourcesファイルを読み取るには、xrdbコマンドが必要です。そこでユーザーは、グラフィカルデスクトップのさまざまなパラメーター(フォントレンダリング、端末の色、カーソルテーマなど)を定義できます。スクリプトを実行可能にする必要があります。
chmod 755 ~/.vnc/xstartup
これでVNCサーバーの構成は完了です。(vncユーザーに代わって)vncserver -localhost noコマンドを使用して実行すると、以前に指定したパスワードで接続して、次の図を参照できます。
systemdを介してサービスを開始する
VNCサーバーを手動で起動することは戦闘での使用にはあまり適していないため、システムサービスを構成します。コマンドはrootとして実行されます(sudoを使用)。まず、サーバー用の新しいユニットファイルを作成しましょう。
sudo nano /etc/systemd/system/vncserver@.service
名前の@記号を使用すると、サービスを構成するための引数を渡すことができます。この場合、VNC表示ポートを設定します。ユニットファイルは、いくつかのセクションで構成されています。
[Unit]
Description=TigerVNC server
After=syslog.target network.target
[Service]
Type=simple
User=vnc
Group=vnc
WorkingDirectory=/home/vnc
PIDFile=/home/vnc/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x960 :%i
ExecStop=/usr/bin/vncserver -kill :%i
[Install]
WantedBy=multi-user.target
次に、新しいファイルの出現についてsystemdに通知し、それをアクティブ化する必要があります。
sudo systemctl daemon-reload
sudo systemctl enable vncserver@1.service
名前の1は画面番号を示します。
VNCサーバーを停止し、サービスとして開始して、ステータスを確認します。
# vnc
vncserver -kill :1
#
sudo systemctl start vncserver@1
sudo systemctl status vncserver@1
サービスが実行されている場合は、次のようになります。
デスクトップ接続
この構成では暗号化を使用していないため、ネットワークパケットが攻撃者によって傍受される可能性があります。さらに、脆弱性はVNCサーバーで見つかることが多いため、インターネットからアクセスするためにそれらを開くべきではありません。ローカルコンピューターに安全に接続するには、トラフィックをSSHトンネルにパックしてから、VNCクライアントを構成する必要があります。Windowsでは、グラフィカルSSHクライアント(PuTTYなど)を使用できます。セキュリティのために、サーバー上のTigerVNCはlocalhostのみをリッスンし、パブリックネットワークから直接アクセスすることはできません。
sudo netstat -ap |more
Linux、FreeBSD、OS X、およびその他のUNIXに似たオペレーティングシステムでは、クライアントコンピューターからのトンネルはsshユーティリティを使用して実行されます(sshdはVNCサーバーで実行されている必要があります)。
ssh -L 5901:127.0.0.1:5901 -C -N -l vnc vnc_server_ip
-Lオプションは、リモート接続のポート5901をlocalhostのポート5901にバインドします。 -Cオプションは圧縮を有効にし、-Nはsshにリモートコマンドを実行しないように指示します。 -lオプションは、リモートログインのログインを指定します。
ローカルコンピューターでトンネルを構成した後、VNCクライアントを起動し、VNCサーバーにアクセスするために以前に設定したパスワードを使用してホスト127.0.0.1:5901(localhost:5901)への接続を確立する必要があります。これで、暗号化されたトンネルを介して、VPS上のXFCEグラフィカルデスクトップ環境と安全に通信できます。スクリーンショットでは、最上位のユーティリティがターミナルエミュレータで実行されており、仮想マシンによるコンピューティングリソースのわずかな消費を示しています。その後、すべてがユーザーアプリケーションに依存します。
LinuxのほぼすべてのVPSにVNCサーバーをインストールして構成できます。これには、ビデオアダプタのエミュレーションや商用ソフトウェアライセンスの購入を伴う、高価でリソースを大量に消費する構成は必要ありません。検討したシステムサービスオプションに加えて、他にもあります。システムの起動時にデーモンモードで(/etc/rc.localを介して)起動するか、inetdを介してオンデマンドで起動します。後者は、マルチユーザー構成を作成するのに役立ちます。インターネットスーパーサーバーはVNCサーバーを起動してクライアントをそれに接続し、VNCサーバーは新しい画面を作成してセッションを開始します。内部での認証には、グラフィカルディスプレイマネージャー(LightDMなど)を使用できます。クライアントを切断すると、セッションが閉じられ、画面で動作しているすべてのプログラムが終了します。