序章

Virtual Network Computing (VNC)は、キーボードとマウスを使用してリモートサーバー上のグラフィカルデスクトップ環境と対話できるようにする接続システムです。 これにより、コマンドラインにまだ慣れていないユーザーにとって、リモートサーバー上のファイル、ソフトウェア、および設定の管理が容易になります。

このガイドでは、Ubuntu22.04サーバー上にTightVNC を使用してVNCサーバーをセットアップし、SSHトンネルを介して安全に接続します。 次に、ローカルマシンでVNCクライアントプログラムを使用して、グラフィカルデスクトップ環境を介してサーバーと対話します。

前提条件

このチュートリアルを完了するには、次のものが必要です。

  • 非ルート管理ユーザーとUFWで構成されたファイアウォールを備えた1つのUbuntu22.04サーバー。 これを設定するには、Ubuntu22.04初期サーバー設定ガイドに従ってください。
  • VNCクライアントがインストールされているローカルコンピューター。 使用するVNCクライアントは、SSHトンネルを介した接続をサポートしている必要があります。
    • Windowsでは、 TightVNC RealVNC 、またはUltraVNCを使用できます。
    • macOSでは、組み込みの画面共有プログラムを使用するか、RealVNCなどのクロスプラットフォームアプリを使用できます。
    • Linuxでは、次のような多くのオプションから選択できます。 vinagre, krdc RealVNC 、またはTightVNC

ステップ1—デスクトップ環境とVNCサーバーをインストールする

デフォルトでは、Ubuntu 22.04サーバーにはグラフィカルデスクトップ環境またはVNCサーバーがインストールされていないため、これらをインストールすることから始めます。

選択するVNCサーバーとデスクトップ環境に関しては、多くのオプションがあります。 このチュートリアルでは、最新の Xfce デスクトップ環境のパッケージと、公式のUbuntuリポジトリから入手できるTightVNCパッケージをインストールします。 XfceとTightVNCはどちらも軽量で高速であることが知られており、低速のインターネット接続でもVNC接続がスムーズで安定していることを保証します。

SSHでサーバーに接続した後、パッケージのリストを更新します。

  1. sudo apt update

Xfceを一緒にインストールします xfce4-goodies パッケージには、デスクトップ環境向けのいくつかの拡張機能が含まれています。

  1. sudo apt install xfce4 xfce4-goodies

インストール中に、Xfceのデフォルトのディスプレイマネージャを選択するように求められる場合があります。 ディスプレイマネージャは、グラフィカルインターフェイスを介してデスクトップ環境を選択してログインできるようにするプログラムです。 Xfceを使用するのは、VNCクライアントに接続するときだけです。これらのXfceセッションでは、root以外のUbuntuユーザーとしてすでにログインしています。 したがって、このチュートリアルの目的上、ディスプレイマネージャの選択は適切ではありません。 いずれかを選択してを押します ENTER.

そのインストールが完了したら、TightVNCサーバーをインストールします。

  1. sudo apt install tightvncserver

次に、を実行します vncserver VNCアクセスパスワードを設定し、初期構成ファイルを作成し、VNCサーバーインスタンスを起動するコマンド:

  1. vncserver

マシンにリモートアクセスするためのパスワードを入力して確認するように求められます。

Output
You will require a password to access your desktops. Password: Verify:

パスワードは6〜8文字の長さである必要があります。 8文字を超えるパスワードは自動的に切り捨てられます。

パスワードを確認すると、表示専用のパスワードを作成するオプションが表示されます。 表示専用パスワードでログインするユーザーは、マウスまたはキーボードでVNCインスタンスを制御することはできません。 これは、VNCサーバーを使用して他の人に何かをデモンストレーションしたい場合に便利なオプションですが、必須ではありません。

次に、プロセスはサーバーに必要なデフォルトの構成ファイルと接続情報を作成します。 さらに、ポートでデフォルトのサーバーインスタンスを起動します 5901. このポートはディスプレイポートと呼ばれ、VNCでは次のように呼ばれます。 :1. VNCは、他のディスプレイポートで複数のインスタンスを起動できます。 :2 ポートを参照 5902, :3 を参照して 5903、 等々:

Output
Would you like to enter a view-only password (y/n)? n xauth: file /home/sammy/.Xauthority does not exist New 'X' desktop is your_hostname:1 Creating default startup script /home/sammy/.vnc/xstartup Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

パスワードを変更したり、表示専用パスワードを追加したりする場合は、 vncpasswd 指図:

  1. vncpasswd

この時点で、VNCサーバーがインストールされて実行されています。 次に、Xfceを起動し、グラフィカルインターフェイスを介してサーバーにアクセスできるように構成します。

ステップ2—VNCサーバーの構成

VNCサーバーは、起動時に実行するコマンドを知る必要があります。 具体的には、VNCは接続するグラフィカルデスクトップ環境を知る必要があります。

VNCサーバーが起動時に実行するコマンドは、次のような構成ファイルにあります。 xstartup の中に .vnc ホームディレクトリの下のフォルダ。 起動スクリプトは、を実行したときに作成されました vncserver 前のステップのコマンドですが、Xfceデスクトップを起動するための独自のコマンドを作成します。

VNCサーバーの構成方法を変更するため、最初にポートで実行されているVNCサーバーインスタンスを停止します。 5901 次のコマンドを使用します。

  1. vncserver -kill :1

別のPIDが表示されますが、出力は次のようになります。

Output
Killing Xtightvnc process ID 17648

変更する前に xstartup ファイル、元のファイルをバックアップします。

  1. mv ~/.vnc/xstartup ~/.vnc/xstartup.bak

今すぐ新しいを作成します xstartup ファイルを作成し、次のようなテキストエディタで開きます。 nano:

  1. nano ~/.vnc/xstartup

次に、ファイルに次の行を追加します。

〜/ .vnc / xstartup
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &

最初の行はシバンです。 * nixプラットフォームの実行可能プレーンテキストファイルでは、シバンは、実行のためにそのファイルを渡すインタプリタをシステムに指示します。 この場合、ファイルをBashインタープリターに渡します。 これにより、連続する各行をコマンドとして順番に実行できるようになります。

ファイルの最初のコマンド、 xrdb $HOME/.Xresources、サーバーユーザーのを読み取るようにVNCのGUIフレームワークに指示します .Xresources ファイル。 .Xresources ここで、ユーザーは、端末の色、カーソルテーマ、フォントレンダリングなど、グラフィカルデスクトップの特定の設定を変更できます。 2番目のコマンドは、サーバーにXfceを起動するように指示します。 VNCサーバーを起動または再起動するたびに、これらのコマンドが自動的に実行されます。

これらの行を追加したら、ファイルを保存して閉じます。 使用した場合 nano、を押してそうします CTRL + X, Y、 それから ENTER.

VNCサーバーがこの新しいスタートアップファイルを適切に使用できるようにするには、次のコマンドを実行可能にする必要があります。

  1. chmod +x ~/.vnc/xstartup

次に、VNCサーバーを再起動します。

  1. vncserver -localhost

今回のコマンドには、 -localhost オプション。VNCサーバーをサーバーのループバックインターフェイスにバインドします。 これにより、VNCはそれがインストールされているサーバーから発信された接続のみを許可します。

次のステップでは、ローカルマシンとサーバーの間にSSHトンネルを確立し、基本的にVNCをだまして、ローカルマシンからの接続がサーバーで発生したと思わせます。 この戦略により、VNCの周囲にセキュリティの層が追加されます。これは、VNCにアクセスできるのは、サーバーへのSSHアクセスを既に持っているユーザーのみであるためです。

次のような出力が表示されます。

Output
New 'X' desktop is your_hostname:1 Starting applications specified in /home/sammy/.vnc/xstartup Log file is /home/sammy/.vnc/your_hostname:1.log

構成が整ったら、ローカルマシンからVNCサーバーに接続する準備が整います。

ステップ3—VNCデスクトップに安全に接続する

VNC自体は、接続時に安全なプロトコルを使用しません。 サーバーに安全に接続するには、SSHトンネルを確立してから、直接接続するのではなく、そのトンネルを使用して接続するようにVNCクライアントに指示します。

ローカルコンピュータにSSH接続を作成し、安全に転送します。 localhost VNCの接続。 これは、LinuxまたはmacOSのターミナルから次の方法で実行できます。 ssh 指図:

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

これがこれです ssh コマンドのオプションの意味:

  • -L 59000:localhost:5901-L switchは、ローカルコンピュータの指定されたポートを指定します(59000)は、宛先サーバー上の指定されたホストとポートに転送されます(localhost:5901、ポートを意味します 5901 宛先サーバー上で、次のように定義されます your_server_ip). 指定するローカルポートは多少任意であることに注意してください。 ポートがまだ別のサービスにバインドされていない限り、トンネルの転送ポートとして使用できます。
  • -C:このフラグは圧縮を有効にし、リソースの消費を最小限に抑え、処理を高速化します。
  • -N:このオプションは ssh リモートコマンドを実行したくないこと。 この設定は、ポートを転送するだけの場合に便利です。
  • -l sammy your_server_ip-l スイッチを使用すると、サーバーに接続したときにログインするユーザーを指定できます。 必ず交換してください sammyyour_server_ip root以外のユーザーの名前とサーバーのIPアドレスを使用します。

:このコマンドは、ポートから情報を転送するSSHトンネルを確立します 5901 VNCサーバーでポートする 59000 ポート経由でローカルマシン上 22 各マシンで、SSHのデフォルトポート。 前提条件Ubuntu22.04 の初期サーバーセットアップガイドに従っていると仮定すると、OpenSSHを介したサーバーへの接続を許可するUFWルールが追加されます。

これは、サーバーのファイアウォールを開いてポートへの接続を許可するよりも安全です。 5901、これにより、誰でもVNC経由でサーバーにアクセスできるようになります。 SSHトンネルを介して接続することにより、サーバーへのSSHアクセスがすでにあるマシンへのVNCアクセスを制限します。

PuTTYを使用してサーバーに接続している場合は、ターミナルウィンドウのトップバーを右クリックし、[設定の変更…]オプションをクリックしてSSHトンネルを作成できます。

PuTTY再構成ウィンドウの左側にあるツリーメニューでConnectionブランチを見つけます。 SSH ブランチを展開し、Tunnelsをクリックします。 SSHポートフォワーディングを制御するオプション画面で、次のように入力します。 59000 ソースポートおよび localhost:5901 Destination として、次のようになります。

次に、追加ボタンをクリックし、次に適用ボタンをクリックしてトンネルを実装します。

トンネルが実行されたら、VNCクライアントを使用して接続します localhost:59000. 手順1で設定したパスワードを使用して認証するように求められます。

接続すると、デフォルトのXfceデスクトップが表示されます。 次のようになります。

次に示すように、ファイルマネージャを使用するか、コマンドラインからホームディレクトリ内のファイルにアクセスできます。

プレス CTRL+C ローカルターミナルでSSHトンネルを停止し、プロンプトに戻ります。 これにより、VNCセッションも切断されます。

これで、systemdサービスとして実行するようにVNCサーバーを構成できます。

ステップ4—VNCをシステムサービスとして実行する

Systemdサービスとして実行するようにVNCサーバーを設定することにより、他のサービスと同様に、必要に応じてサーバーを開始、停止、および再起動できます。 systemdの管理コマンドを使用して、サーバーの起動時にVNCが確実に起動するようにすることもできます。

まず、という新しいユニットファイルを作成します /etc/systemd/system/[email protected]:

  1. sudo nano /etc/systemd/system/[email protected]

The @ 名前の最後にある記号を使用すると、サービス構成で使用できる引数を渡すことができます。 これを使用して、サービスを管理するときに使用するVNCディスプレイポートを指定します。

次の行をファイルに追加します。 User Group WorkingDirectory の値、およびPIDFILEの値のユーザー名をユーザー名と一致するように変更してください。

/etc/systemd/system/[email protected]
[Unit]
Description=Start TightVNC server at startup
After=syslog.target network.target

[Service]
Type=forking
User=sammy
Group=sammy
WorkingDirectory=/home/sammy

PIDFile=/home/sammy/.vnc/%H:%i.pid
ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
ExecStop=/usr/bin/vncserver -kill :%i

[Install]
WantedBy=multi-user.target

The ExecStartPre コマンドがすでに実行されている場合、コマンドはVNCを停止します。 The ExecStart コマンドはVNCを開始し、色深度を1280×800の解像度で24ビットカラーに設定します。 ニーズに合わせて、これらのスタートアップオプションを変更することもできます。 また、 ExecStart コマンドには再びが含まれます -localhost オプション。

ファイルを保存して閉じます。

次に、システムに新しいユニットファイルを認識させます。

  1. sudo systemctl daemon-reload

ユニットファイルを有効にします。

  1. sudo systemctl enable [email protected]

The 1 次の @ 記号は、サービスが表示される表示番号を示します。この場合はデフォルトです。 :1 ステップ2で説明したように。

VNCサーバーがまだ実行中の場合は、現在のインスタンスを停止します。

  1. vncserver -kill :1

次に、他のsystemdサービスを開始するのと同じように開始します。

  1. sudo systemctl start vncserver@1

次のコマンドで開始したことを確認できます。

  1. sudo systemctl status vncserver@1

正しく起動した場合、出力は次のようになります。

Output
[email protected] - Start TightVNC server at startup Loaded: loaded (/etc/systemd/system/[email protected]; enabled; vendor preset: enabled) Active: active (running) since Mon 2022-04-18 16:57:26 UTC; 20s ago Process: 97088 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2) Process: 97092 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :1 (code=exited, status=0/SUCCESS) Main PID: 97103 (Xtightvnc) Tasks: 77 (limit: 4665) Memory: 146.7M CPU: 4.459s CGroup: /system.slice/system-vncserver.slice/[email protected] . . .

これで、サーバーが起動するたびにVNCサーバーを使用できるようになり、他のsystemdサービスと同様にsystemctlコマンドで管理できます。

ただし、クライアント側での違いはありません。 再接続するには、SSHトンネルを再度開始します。

  1. ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip

次に、VNCクライアントソフトウェアを使用して新しい接続を確立します。 localhost:59000 サーバーに接続します。

結論

これで、Ubuntu22.04サーバーでセキュリティで保護されたVNCサーバーが稼働しています。 これで、ユーザーフレンドリーなグラフィカルインターフェイスを使用してファイル、ソフトウェア、および設定を管理できるようになり、Webブラウザなどのグラフィカルソフトウェアをリモートで実行できるようになります。