仮想ネットワークコンピューティング、 すなわちVNC(Virtual Network Computing)は、キーボードとマウスを使用して 、リモートサーバー上のグラフィカルデスクトップ環境と対話できるようにする接続システムです 。これにより、コマンドラインにまだ慣れていないユーザーにとって、リモートサーバー上のファイル、ソフトウェア、および設定の管理が簡単になります。
このガイドでは、Ubuntu 20.04サーバー上にTightVNCを使用してVNCサーバーを設定し、SSHトンネルを介して安全に接続します。次に、ローカルマシンでVNCクライアントプログラムを使用し、グラフィカルデスクトップ環境を介してサーバーと対話します。
このチュートリアルを完了する には 、 次のものが必要です。
デフォルトでは 、Ubuntu 20 .04サーバーにはグラフィカルデスクトップ 環境やVNC サーバーがインストールされていないため、それらのインストールから始めます 。
選択するVNCサーバーとデスクトップ環境に関しては、多くのオプションがあります。このチュートリアルでは、最新のXfceデスクトップ環境用のパッケージと、公式のUbuntuリポジトリで利用可能なTightVNCパッケージをインストールします。XfceとTightVNCは、いずれも軽量で高速ですから、低速のインターネット接続でもスムーズで安定したVNC接続を保証します。
SSHでサーバーに接続した後 、パッケージのリストを更新 し ます 。
- sudo apt update
次に、xfce4-goodies
パッケージと共にXfceをインストールします。これには、デスクトップ環境のいくつかの拡張機能が含まれています。
- sudo apt install xfce4 xfce4-goodies
インストール中に、Xfceのデフォルトのディスプレイマネージャーを選択するように求められる場合があります。ディスプレイマネージャーは、グラフィカルインターフェイスを介してデスクトップ環境を選択してログインできるようにするプログラムです。Xfceは、VNCクライアントに接続するときにのみ使用します。これらのXfceセッションでは、root以外のUbuntuユーザーとして既にログインしています。したがって、このチュートリアルでは、ディスプレイマネージャーの選択は適切ではありません。いずれかを選択してENTER
キーを押します。
インストールが完了したら、TightVNCサーバーをインストールします。
- sudo apt install tightvncserver
次に、vncserver
コマンドを実行してVNCアクセスパスワードを設定し、初期構成ファイルを作成し、VNCサーバーインスタンスを起動します。
- vncserver
次に、マシンにリモートアクセスするためのパスワードを入力して確認するように求められます。
OutputYou will require a password to access your desktops.
Password:
Verify:
パスワードは6〜8文字の長さである必要があります。8文字を超えるパスワードは自動的に切り捨てられます。
パスワードを確認すると、表示専用のパスワードを作成するオプションが表示されます。表示専用パスワードでログインするユーザーは、マウスまたはキーボードでVNCインスタンスを制御できなくなります。これは、VNCサーバーを使用して他の人に何かをデモンストレーションしたい場合に便利なオプションですが、必須ではありません。
次に、このプロセスは、サーバーに必要なデフォルトの構成ファイルと接続情報を作成します。さらに、ポート5901
でデフォルトのサーバーインスタンスを起動します。このポートはディスプレイポートと呼ばれ、VNCでは:1
として参照されます。VNCは、他のディスプレイポートで複数のインスタンスを起動できます。例えば、:2
はポート5902
を参照し、:3
は5903
を参照する、など。
OutputWould 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
コマンドを使用できることです。
- vncpasswd
この時点では、VNCサーバーがインストールされて実行されています。それでは、Xfceを起動し、グラフィカルインターフェイスを介してサーバーにアクセスできるように構成しましょう。
VNCサーバーは、起動時にどのコマンドを実行するか知る必要があります。具体的には、VNCは、接続する必要のあるグラフィカルデスクトップ環境がどれかを知る必要があります。
VNCサーバーが起動時に実行するコマンドは、ホームディレクトリ配下にある.vnc
フォルダ内のxstartup
と呼ばれる構成ファイルにあります。起動スクリプトは、前のステップでvncserver
コマンドを実行したときに作成されていましたが、Xfceデスクトップを起動するためには、独自のスクリプトを作成します。
VNCサーバーの構成方法を変更するので、最初に、次のコマンドを使用して、ポート5901
で実行されているVNCサーバーインスタンスを停止します。
- vncserver -kill :1
別のPIDが表示されますが、出力は次のようになります。
OutputKilling Xtightvnc process ID 17648
xstarturp
ファイルを変更する前に、元ファイルをバックアップします。
- mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
ここで、新しいxstarturp
ファイルを作成し、nano
などのテキストエディターで開きます。
- nano ~/.vnc/xstartup
次に、ファイルに次の行を追加します。
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
最初の行は、shebangです。* nixプラットフォーム上の実行可能なプレーンテキストファイルで、shebangは、システムに、そのファイルをどのインタプリタに渡して実行するかを指示します。この場合、ファイルをBashインタプリタに渡します。これにより、連続する各行を順番にコマンドとして実行できるようになります。
ファイルに記述される最初のコマンドxrdb $HOME/.Xresources
は、VNCのGUIフレームワークに、サーバーユーザーの.Xresource
ファイルを読み取るように指示します。.Xresource
は、ユーザーが、端末の色、カーソルテーマ、フォントレンダリングなど、グラフィカルデスクトップの特定の設定を変更できる場所です。2番目のコマンドは、サーバーにXfceを起動するように指示します。VNCサーバーを起動または再起動するたびに、これらのコマンドが自動的に実行されます。
これらの行を追加したら、ファイルを保存して閉じます。nano
を使用した場合は、CTRL + X
、Y
、ENTER
キーを押します。
VNCサーバーがこの新しいスタートアップファイルを適切に使用できるようにするために、実行可能なファイルにする必要があります。
- chmod +x ~/.vnc/xstartup
次に、VNCサーバーを再起動します。
- vncserver -localhost
この時のコマンドには、VNCサーバーをサーバーのループバックインターフェイスにバインドする-localhost
オプションが含まれていることに注意してください。これにより、VNCは、それがインストールされているサーバーから発信された接続のみを許可します。
次のステップでは、ローカルマシンとサーバーの間にSSHトンネルを確立し、VNCがローカルマシンからの接続がサーバーから発信されたものと思わせる仕掛けをします。この戦略により、VNCの周囲にセキュリティの層が追加されます。これは、VNCにアクセスできるのは、サーバーへのSSHアクセスを既に持っているユーザーのみであるためです。
次のような出力が表示されます。
OutputNew '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サーバーに接続する準備が整いました。
VNC自体は、接続時に安全なプロトコルを使用しません。サーバーに安全に接続するには、SSHトンネルを確立してから、VNCクライアントに、直接接続するのではなく、そのトンネルを使用して接続するように指示します。
VNC用のlocalhost
接続に安全に転送するローカルコンピュータ上にSSH接続を作成します。この操作は、LinuxまたはmacOSのターミナルを介して、次のssh
コマンドで実行できます。
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
この ssh
コマンドのオプションの意味は次のとおりです。
-L 59000:localhost:5901
:-L
スイッチは、ローカルコンピューター(59000
)の指定されたポートが宛先サーバー(localhost:5901
は、宛先サーバーのポート5901
を意味し、your_server_ip
として定義される)の指定されたホストとポートに転送されるよう指定します指定するローカルポートは多少任意であることに注意してください。ポートがまだ別のサービスにバインドされていない限り、トンネルの転送ポートとして使用できます。-C
:このフラグは圧縮を有効にし、リソースの消費を最小限に抑え、処理を高速化します。-N
: このオプションは、リモートコマンドを実行したくないssh
に指定します。この設定は、ポートを転送するだけの場合に役立ちます。-l sammy your_server_ip
:-l
スイッチを使用すると、サーバーに接続したときにログインするユーザーを指定できます。 sammy
と your_server_ip
は、root以外のユーザーの名前とサーバーのIPアドレスに必ず置き換えてください。注:このコマンドは、VNCサーバーのポート5901
から各マシンのポート22
(SSHのデフォルトポート)を介してローカルマシンのポート59000
に情報を転送するSSHトンネルを確立します。前提条件となるUbuntu 20.04の初期サーバーセットアップガイドに従っていると仮定する場合、OpenSSHを介したサーバーへの接続を許可するUFWルールを追加します。
これは、サーバーのファイアウォールを単に開いてポート5901
への接続を許可するよりも安全です。これにより、誰でもVNCを介してサーバーにアクセスできるようになります。SSHトンネルを介して接続することにより、サーバーへのSSHアクセスを既に持っているマシンへのVNCアクセスを制限します
PuTTYを使用してサーバーに接続している場合は、ターミナルウィンドウのトップバーを右クリックし、**Change Settings…(設定の変更)**オプションをクリックします。
PuTTY再構成ウィンドウの左側にあるツリーメニューで接続ブランチを見つけます。SSHブランチを展開し、トンネルをクリックします。**[Options controlling SSH port forwarding(SSHポート転送画面を制御するオプション]**画面において、5900をソースポートとして、localhost:5901
を宛先として入力します。
次に、追加ボタンをクリックし、適用ボタンをクリックしてトンネルを実装します。
トンネルが起動したら、VNCクライアントを使用してlocalhost:59000
に接続します。ステップ1に設定したパスワードを使用して認証するよう求められます。
接続すると、デフォルトのXfceデスクトップが表示されます。このように表示されるはずです。
次に示すように、ファイルマネージャーまたはコマンドラインから、ホームディレクトリ内のファイルにアクセスできます。
ローカルターミナルでCTRL + C
を押して、SSHトンネルを停止し、プロンプトに戻ります。これにより、VNCセッションも切断されます。
これで、systemdサービスとして実行するようにVNCサーバーを構成できます。
systemdサービスとして実行するようにVNCサーバーを設定することにより、他のサービスと同様に、必要に応じてサーバーを開始、停止、再起動できます。systemdの管理コマンドを使用して、サーバーの起動時にVNCが確実に起動するようにすることもできます。
まず、/etc/systemd/system/vncserver@.service
という新しいユニットファイルを作成します。
- sudo nano /etc/systemd/system/vncserver@.service
名前の最後にある@
記号を使用すると、サービス構成で使用できる引数を渡すことができます。これを使用して、サービスを管理するときに使用するVNC表示ポートを指定します。
ファイルに次の行を追加します。ユーザー、グループ、WorkingDirectory、PIDFILEの値の中のユーザー名をユーザー名に変更してください。
[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
ExecStartPre
コマンドは、すでに実行している場合は、VNCを停止します。ExecStart
コマンドはVNCを起動し、色深度を1280x800の解像度で24ビットカラーに設定します。ニーズに合わせて、これらの起動オプションを変更することもできます。また、ExecStart
コマンドには-localhost
オプションが含まれていることに注意してください。
ファイルを保存して閉じます。
次に、システムに新しいユニットファイルを認識させます。
- sudo systemctl daemon-reload
ユニットファイルを有効にします。
- sudo systemctl enable vncserver@1.service
@
記号に続く1
は、サービスが表示される表示番号を示します。この場合、ステップ2で説明したデフォルトの:1
です。
VNCサーバーがまだ実行中の場合は、現在のインスタンスを停止します。
- vncserver -kill :1
次に、他のsystemdサービスを開始するのと同じように開始します。
- sudo systemctl start vncserver@1
このコマンドで起動したことを確認できます。
- sudo systemctl status vncserver@1
正しく起動した場合は、出力は次のようになります。
Output● vncserver@1.service - Start TightVNC server at startup
Loaded: loaded (/etc/systemd/system/vncserver@.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-05-07 17:23:50 UTC; 6s ago
Process: 39768 ExecStartPre=/usr/bin/vncserver -kill :1 > /dev/null 2>&1 (code=exited, status=2)
Process: 39772 ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 :1 (code=exited, status=0/SUCCESS)
Main PID: 39795 (Xtightvnc)
...
これで、サーバーが起動するたびにVNCサーバーを使用できるようになり、他のsystemdサービスと同様にsystemctl
コマンドを使用してサーバーを管理できます。
ただし、クライアント側には違いはありません。再接続するには、SSHトンネルを再度起動します。
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
次に、VNCクライアントソフトウェアを使用してlocalhost:59000
に新しい接続を確立し、サーバーに接続します。
これで、Ubuntu 20.04サーバー上で安全なVNCサーバが起動し、実行されるようになりました。これで、ファイル、ソフトウェア、設定をユーザーフレンドリーなグラフィカルなインターフェースで管理できるようになり、Webブラウザのようなグラフィカルなソフトウェアをリモートで実行できるようになります。
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!