So installieren und konfigurieren Sie VNC auf Ubuntu 22.04

Einführung

Virtual Network Computing oder VNC ist ein Verbindungssystem, das es Ihnen ermöglicht, Ihre Tastatur und Maus zu verwenden, um mit einer grafischen Desktop-Umgebung auf einem entfernten Server zu interagieren. Es erleichtert die Verwaltung von Dateien, Software und Einstellungen auf einem entfernten Server für Benutzer, die mit der Befehlszeile noch nicht vertraut sind.

In diesem Handbuch richten Sie einen VNC-Server mit TightVNC auf einem Ubuntu 22.04-Server ein und stellen eine sichere Verbindung über einen SSH-Tunnel her. Anschließend verwenden Sie ein VNC-Clientprogramm auf Ihrem lokalen Rechner, um mit Ihrem Server über eine grafische Desktop-Umgebung zu interagieren.

Voraussetzungen

Um dieses Tutorial abzuschließen, benötigen Sie:

  • Einen Ubuntu 22.04-Server mit einem nicht-root-administrativen Benutzer und einer Firewall, die mit UFW konfiguriert ist. Um dies einzurichten, folgen Sie unserer Anleitung zur Einrichtung eines Servers für Ubuntu 22.04.
  • A local computer with a VNC client installed. The VNC client you use must support connections over SSH tunnels:

Schritt 1 – Installation der Desktop-Umgebung und des VNC-Servers

Standardmäßig wird ein Ubuntu 22.04 Server nicht mit einer grafischen Desktop-Umgebung oder einem VNC-Server installiert, daher beginnen Sie mit der Installation dieser.

Sie haben viele Optionen, wenn es um die Auswahl des VNC-Servers und der Desktop-Umgebung geht. In diesem Tutorial werden Pakete für die neueste Xfce-Desktop-Umgebung und das TightVNC-Paket aus dem offiziellen Ubuntu-Repository installiert. Sowohl Xfce als auch TightVNC sind für ihre Leichtigkeit und Geschwindigkeit bekannt, was sicherstellt, dass die VNC-Verbindung auch bei langsameren Internetverbindungen reibungslos und stabil ist.

Nachdem Sie eine Verbindung zu Ihrem Server über SSH hergestellt haben, aktualisieren Sie Ihre Paketliste:

  1. sudo apt update

Installieren Sie nun Xfce zusammen mit dem xfce4-goodies-Paket, das einige Verbesserungen für die Desktop-Umgebung enthält:

  1. sudo apt install xfce4 xfce4-goodies

Während der Installation werden Sie möglicherweise aufgefordert, einen Standard-Display-Manager für Xfce auszuwählen. Ein Display-Manager ist ein Programm, das es Ihnen ermöglicht, eine Desktop-Umgebung über eine grafische Benutzeroberfläche auszuwählen und sich anzumelden. Sie werden Xfce nur verwenden, wenn Sie sich mit einem VNC-Client verbinden, und in diesen Xfce-Sitzungen sind Sie bereits als Ihr nicht-root Ubuntu-Benutzer angemeldet. Für diesen Tutorial ist Ihre Auswahl des Display-Managers also nicht relevant. Wählen Sie einfach einen aus und drücken Sie ENTER.

Sobald die Installation abgeschlossen ist, installieren Sie den TightVNC-Server:

  1. sudo apt install tightvncserver

Als Nächstes führen Sie den Befehl vncserver aus, um ein VNC-Zugangspasswort festzulegen, die initialen Konfigurationsdateien zu erstellen und eine VNC-Serverinstanz zu starten:

  1. vncserver

Sie werden aufgefordert, ein Passwort einzugeben und zu bestätigen, um auf Ihren Computer remote zuzugreifen:

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

Das Passwort muss zwischen sechs und acht Zeichen lang sein. Passwörter, die länger als 8 Zeichen sind, werden automatisch abgeschnitten.

Nachdem Sie das Passwort bestätigt haben, haben Sie die Möglichkeit, ein nur-Anzeigen-Passwort zu erstellen. Benutzer, die sich mit dem nur-Anzeigen-Passwort anmelden, können die VNC-Instanz nicht mit ihrer Maus oder Tastatur steuern. Dies ist eine hilfreiche Option, wenn Sie anderen Personen etwas über Ihren VNC-Server zeigen möchten, aber dies ist nicht erforderlich.

Der Prozess erstellt dann die erforderlichen Standardkonfigurationsdateien und Verbindungsinformationen für den Server. Zusätzlich startet er eine Standard-Serverinstanz auf Port 5901. Dieser Port wird als Anzeigehafen bezeichnet und von VNC als :1 bezeichnet. VNC kann mehrere Instanzen auf anderen Anzeigehäfen starten, wobei :2 auf Port 5902 verweist, :3 auf 5903 verweist und so weiter:

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

Beachten Sie, dass Sie Ihr Passwort jederzeit ändern oder ein Ansichtspasswort hinzufügen können, dies mit dem Befehl vncpasswd tun können:

  1. vncpasswd

Zu diesem Zeitpunkt ist der VNC-Server installiert und läuft. Jetzt werden Sie ihn konfigurieren, um Xfce zu starten und uns Zugriff auf den Server über eine grafische Benutzeroberfläche zu geben.

Schritt 2 — Konfigurieren des VNC-Servers

Der VNC-Server muss wissen, welche Befehle beim Start ausgeführt werden sollen. Speziell muss VNC wissen, welche grafische Desktop-Umgebung es sich verbinden soll.

Die Befehle, die der VNC-Server beim Start ausführt, befinden sich in einer Konfigurationsdatei namens xstartup im .vnc -Ordner unter Ihrem Home-Verzeichnis. Das Startskript wurde erstellt, als Sie den Befehl vncserver im vorherigen Schritt ausgeführt haben, aber Sie werden Ihr eigenes erstellen, um den Xfce-Desktop zu starten.

Da Sie die Konfiguration des VNC-Servers ändern werden, stoppen Sie zuerst die laufende VNC-Serverinstanz auf Port 5901 mit dem folgenden Befehl:

  1. vncserver -kill :1

Die Ausgabe sieht ähnlich aus, obwohl Sie eine andere PID sehen werden:

Output
Killing Xtightvnc process ID 17648

Bevor Sie die Datei xstartup ändern, sichern Sie das Original:

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

Erstellen Sie nun eine neue xstartup-Datei und öffnen Sie sie in einem Texteditor wie nano:

  1. nano ~/.vnc/xstartup

Fügen Sie dann die folgenden Zeilen zur Datei hinzu:

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

Die erste Zeile ist ein Shebang. In ausführbaren Klartextdateien auf *nix-Plattformen gibt ein Shebang dem System an, welchen Interpreter es zur Ausführung dieser Datei verwenden soll. In diesem Fall geben Sie die Datei an den Bash-Interpreter weiter. Dadurch werden die nachfolgenden Zeilen nacheinander als Befehle ausgeführt.

Der erste Befehl in der Datei, xrdb $HOME/.Xresources, fordert das GUI-Framework von VNC auf, die Datei .Xresources des Benutzers des Servers zu lesen. .Xresources ist der Ort, an dem ein Benutzer bestimmte Einstellungen des grafischen Desktops wie Terminalfarben, Cursor-Themes und Schriftrendering ändern kann. Der zweite Befehl fordert den Server auf, Xfce zu starten. Diese Befehle werden jedes Mal automatisch ausgeführt, wenn Sie den VNC-Server starten oder neu starten.

Speichern und schließen Sie die Datei, nachdem Sie diese Zeilen hinzugefügt haben. Wenn Sie nano verwendet haben, tun Sie dies, indem Sie STRG + X, Y und dann EINGABE drücken.

Um sicherzustellen, dass der VNC-Server diese neue Startdatei ordnungsgemäß verwenden kann, müssen Sie sie ausführbar machen:

  1. chmod +x ~/.vnc/xstartup

Dann starten Sie den VNC-Server neu:

  1. vncserver -localhost

Beachten Sie, dass dieses Mal der Befehl die Option -localhost enthält, die den VNC-Server an die Loopback-Schnittstelle Ihres Servers bindet. Dadurch werden nur Verbindungen zugelassen, die vom Server stammen, auf dem er installiert ist.

Im nächsten Schritt richten Sie einen SSH-Tunnel zwischen Ihrem lokalen Rechner und Ihrem Server ein, um VNC praktisch glauben zu machen, dass die Verbindung von Ihrem lokalen Rechner auf Ihrem Server entstanden ist. Diese Strategie erhöht die Sicherheit von VNC, da nur Benutzer, die bereits SSH-Zugriff auf Ihren Server haben, darauf zugreifen können.

Sie sehen eine Ausgabe ähnlich dieser:

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

Mit dieser Konfiguration sind Sie bereit, eine Verbindung zum VNC-Server von Ihrem lokalen Rechner herzustellen.

Schritt 3 – Sicheres Verbinden mit dem VNC-Desktop

VNC selbst verwendet keine sicheren Protokolle für die Verbindung. Um sicher eine Verbindung zu Ihrem Server herzustellen, richten Sie einen SSH-Tunnel ein und teilen Ihrem VNC-Client dann mit, dass er diese Verbindung verwenden soll, anstatt eine direkte Verbindung herzustellen.

Erstellen Sie eine SSH-Verbindung auf Ihrem lokalen Computer, die sicher zur localhost-Verbindung für VNC weitergeleitet wird. Dies können Sie über das Terminal unter Linux oder macOS mit folgendem ssh-Befehl tun:

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

Hier ist die Bedeutung der Optionen dieses ssh-Befehls:

  • -L 59000:localhost:5901: Der -L-Schalter gibt an, dass der angegebene Port auf dem lokalen Computer (59000) an den angegebenen Host und Port auf dem Zielserver weitergeleitet wird (localhost:5901, was Port 5901 auf dem Zielserver bedeutet, definiert als dein_server_ip). Beachten Sie, dass der lokale Port, den Sie angeben, etwas willkürlich ist; solange der Port nicht bereits an einen anderen Dienst gebunden ist, können Sie ihn als Weiterleitungsport für Ihren Tunnel verwenden.
  • -C: Dieser Schalter aktiviert die Komprimierung, was den Ressourcenverbrauch minimieren und die Geschwindigkeit erhöhen kann.
  • -N: Diese Option teilt ssh mit, dass Sie keine entfernten Befehle ausführen möchten. Diese Einstellung ist nützlich, wenn Sie nur Ports weiterleiten möchten.
  • -l sammy dein_server_ip: Der -l-Schalter ermöglicht es Ihnen, den Benutzer anzugeben, als den Sie sich anmelden möchten, sobald Sie eine Verbindung zum Server hergestellt haben. Stellen Sie sicher, dass Sie sammy und dein_server_ip durch den Namen Ihres nicht-root-Benutzers und die IP-Adresse Ihres Servers ersetzen.

Hinweis: Dieser Befehl richtet einen SSH-Tunnel ein, der Informationen vom Port 5901 Ihres VNC-Servers über Port 22 auf jedem Rechner an Port 59000 auf Ihrem lokalen Rechner weiterleitet. Sofern Sie dem Voraussetzung Anleitung für die Erstkonfiguration des Servers für Ubuntu 22.04 gefolgt sind, haben Sie eine UFW-Regel hinzugefügt, die Verbindungen zu Ihrem Server über OpenSSH erlaubt.

Das ist sicherer als einfach die Firewall Ihres Servers zu öffnen, um Verbindungen zum Port 5901 zuzulassen, da dies jedem den Zugriff auf Ihren Server über VNC ermöglichen würde. Durch die Verbindung über einen SSH-Tunnel beschränken Sie den VNC-Zugriff auf Maschinen, die bereits SSH-Zugriff auf den Server haben.

Wenn Sie PuTTY zum Verbinden mit Ihrem Server verwenden, können Sie einen SSH-Tunnel erstellen, indem Sie mit der rechten Maustaste auf die obere Leiste des Terminalfensters klicken und dann die Option Einstellungen ändern… wählen:

Suchen Sie den Verbindung-Zweig im Baummenü auf der linken Seite des PuTTY-Konfigurationsfensters. Erweitern Sie den SSH-Zweig und klicken Sie auf Tunnel. Geben Sie auf dem Bildschirm Optionen zur Steuerung der SSH-Portweiterleitung 59000 als Quellport und localhost:5901 als Ziel ein, so:

Klicken Sie dann auf die Schaltfläche Hinzufügen und anschließend auf die Schaltfläche Anwenden, um den Tunnel zu implementieren.

Sobald der Tunnel aktiv ist, verwenden Sie einen VNC-Client, um eine Verbindung zu localhost:59000 herzustellen. Sie werden aufgefordert, sich mit dem Passwort zu authentifizieren, das Sie im Schritt 1 festgelegt haben.

Sobald Sie verbunden sind, sehen Sie den Standard-Xfce-Desktop. Es sollte ungefähr so aussehen:

Sie können auf Dateien in Ihrem Home-Verzeichnis mit dem Dateimanager oder von der Befehlszeile aus zugreifen, wie hier zu sehen ist:

Drücken Sie Strg+C in Ihrem lokalen Terminal, um den SSH-Tunnel zu stoppen und zu Ihrem Prompt zurückzukehren. Dies trennt auch Ihre VNC-Sitzung.

Jetzt können Sie Ihren VNC-Server so konfigurieren, dass er als systemd-Dienst ausgeführt wird.

Schritt 4 – Ausführen von VNC als systemd-Dienst

Indem Sie den VNC-Server als systemd-Dienst einrichten, können Sie ihn bei Bedarf wie jeden anderen Dienst starten, stoppen und neu starten. Sie können auch die Verwaltungsbefehle von systemd verwenden, um sicherzustellen, dass VNC beim Booten Ihres Servers startet.

Zuerst erstellen Sie eine neue Unit-Datei namens /etc/systemd/system/[email protected]:

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

Das @-Symbol am Ende des Namens ermöglicht es uns, ein Argument zu übergeben, das Sie in der Dienstkonfiguration verwenden können. Sie werden dies verwenden, um den VNC-Anzeigehafen anzugeben, den Sie beim Verwalten des Dienstes verwenden möchten.

Fügen Sie die folgenden Zeilen zur Datei hinzu. Stellen Sie sicher, dass Sie den Wert von User, Group, WorkingDirectory und den Benutzernamen im Wert von PIDFILE entsprechend Ihrem Benutzernamen ändern:

/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

Der Befehl ExecStartPre stoppt VNC, wenn es bereits läuft. Der Befehl ExecStart startet VNC und setzt die Farbtiefe auf 24-Bit-Farbe mit einer Auflösung von 1280×800. Sie können diese Startoptionen ebenfalls ändern, um Ihren Anforderungen zu entsprechen. Beachten Sie auch, dass der Befehl ExecStart erneut die Option -localhost enthält.

Speichern und schließen Sie die Datei.

Als nächstes informieren Sie das System über die neue Unit-Datei:

  1. sudo systemctl daemon-reload

Aktivieren Sie die Unit-Datei:

  1. sudo systemctl enable [email protected]

Der 1 nach dem @-Zeichen gibt an, über welche Anzeigenummer der Dienst angezeigt werden soll, in diesem Fall die Standardnummer :1, wie in Schritt 2 besprochen wurde.

Stoppen Sie die aktuelle Instanz des VNC-Servers, falls sie noch läuft:

  1. vncserver -kill :1

Dann starten Sie ihn wie jeden anderen systemd-Dienst:

  1. sudo systemctl start vncserver@1

Sie können überprüfen, ob er gestartet wurde, mit diesem Befehl:

  1. sudo systemctl status vncserver@1

Wenn er korrekt gestartet wurde, sollte die Ausgabe wie folgt aussehen:

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] . . .

Ihr VNC-Server ist nun einsatzbereit, sobald Ihr Server hochfährt, und Sie können ihn mit systemctl-Befehlen wie jeden anderen systemd-Dienst verwalten.

Auf der Clientseite wird jedoch kein Unterschied feststellbar sein. Um erneut eine Verbindung herzustellen, starten Sie Ihren SSH-Tunnel erneut:

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

Dann stellen Sie eine neue Verbindung mit Ihrer VNC-Client-Software zu localhost:59000 her, um sich mit Ihrem Server zu verbinden.

Abschluss

Sie haben jetzt einen gesicherten VNC-Server auf Ihrem Ubuntu 22.04-Server eingerichtet und in Betrieb genommen. Nun können Sie Ihre Dateien, Software und Einstellungen mit einer benutzerfreundlichen grafischen Benutzeroberfläche verwalten und grafische Software wie Webbrowser remote ausführen.

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-vnc-on-ubuntu-22-04