Virtual Network Computing, auch VNC genannt, ist ein Verbindungssystem, das es Ihnen ermöglicht, mithilfe Ihrer Maus und Tastatur mit einer grafischen Desktop-Umgebung auf einem entfernten Server zu interagieren. Es vereinfacht die Verwaltung von Dateien, Software und Einstellungen auf einem entfernten Server für Benutzer, die mit der Befehlszeile noch nicht so versiert sind.
In dieser Kurzanleitung erfahren Sie, wie Sie einen VNC-Server mit TightVNC auf einem Ubuntu 20.04-Server einrichten und ihn sicher über einen SSH-Tunnel verbinden. Anschließend verwenden Sie ein VNC-Clientprogramm auf Ihrem lokalen Computer, um mit Ihrem Server über eine grafische Desktop-Umgebung zu interagieren.
Um dieses Tutorial zu absolvieren, benötigen Sie:
Standardmäßig wird ein Ubuntu 20.04 Server nicht mit einer grafischen Desktop-Umgebung oder einem installierten VNC-Server geliefert. Daher beginnen Sie mit deren Installation.
Bei der Wahl des VNC-Servers und der Desktop-Umgebung haben Sie viele Optionen, aus denen Sie auswählen können. In diesem Tutorial installieren Sie Pakete für die aktuellste Xfce-Desktop-Umgebung und das TightVNC-Paket, das im offiziellen Ubuntu Repository verfügbar ist. Sowohl Xfce als auch TightVNC sind für ihre leichte und schnelle Ausführung bekannt. Dadurch wird sichergestellt, dass die VNC-Verbindung reibungslos funktioniert und auch bei langsameren Internetverbindungen stabil bleibt.
Sobald Ihr Server mit SSH verbunden ist, aktualisieren Sie Ihre Paketliste:
- sudo apt update
Installieren Sie nun Xfce zusammen mit dem xfce4-goodies
-Paket, das einige Verbesserungen für die Desktop-Umgebung enthält:
- sudo apt install xfce4 xfce4-goodies
Während der Installation werden Sie möglicherweise dazu aufgefordert, einen standardmäßigen Display-Manager für Xfce auszuwählen. Ein Display-Manager ist ein Programm, mit dem Sie sich über eine grafische Oberfläche in einer Desktop-Umgebung einloggen und Vorgaben auswählen können. Sie verwenden Xfce nur, wenn Sie sich mit einem VNC-Client verbinden. In diesen Xfce-Sitzungen sind Sie bereits als Nicht-Root-Benutzer für Ubuntu angemeldet. Für die Zwecke dieses Tutorials ist Ihre Auswahl des Display-Managers nicht relevant. Wählen Sie entweder einen aus oder drücken Sie ENTER
.
Wenn diese Installation abgeschlossen ist, installieren Sie den TightVNC Server:
- sudo apt install tightvncserver
Führen Sie als Nächstes den Befehl vncserver
aus, um ein VNC-Zugangspasswort festzulegen, die anfänglichen Konfigurationsdateien zu erstellen und eine VNC-Serverinstanz zu starten:
- vncserver
Sie werden dazu aufgefordert, ein Passwort einzugeben und zu verifizieren, um ferngesteuert auf Ihren Rechner zuzugreifen:
OutputYou will require a password to access your desktops.
Password:
Verify:
Das Passwort muss zwischen sechs und acht Zeichen lang sein. Passwörter mit mehr als 8 Zeichen werden automatisch verkürzt.
Sobald Sie das Passwort verifiziert haben, können Sie ein schreibgeschütztes Passwort einrichten. Benutzer, die sich mit dem schreibgeschützten Passwort anmelden, können die VNC-Instanz nicht mit der Maus oder Tastatur steuern. Das ist eine hilfreiche Option, wenn Sie mit Ihrem VNC-Server anderen etwas zeigen möchten, ist aber nicht erforderlich.
Der Prozess erstellt dann die notwendigen Standard-Konfigurationsdateien und Verbindungsinformationen für den Server. Zudem startet er eine Standard-Serverinstanz auf Port 5901
. Dieser Port nennt sich Anzeige-Port und wird vom VNC als :1
bezeichnet. VNC kann mehrere Instanzen auf anderen Anzeige-Ports starten. :2
bezieht sich auf Port 5902
, :3
auf 5903
und so weiter:
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
Wenn Sie Ihr Passwort ändern oder ein schreibgeschütztes Passwort hinzufügen möchten, beachten Sie, dass Sie dies mit dem Befehl vncpasswd
tun können:
- vncpasswd
Das ist der Moment, ab dem der VNC-Server installiert ist und läuft. Nun konfigurieren wir ihn, um Xfce zu starten und um uns Zugriff auf den Server über eine grafische Oberfläche zu erteilen.
Der VNC-Server muss wissen, welche Befehle er beim Start ausführen soll. VNC muss vor allem wissen, mit welcher grafischen Desktop-Umgebung er sich verbinden soll.
Die Befehle, die der VNC-Server beim Starten ausführt, befinden sich in einer Konfigurationsdatei namens xstartup
im Ordner .vnc
unter Ihrem Stammverzeichnis. Das Start-Skript wurde erstellt, als Sie den vncserver
im vorherigen Schritt ausgeführt haben, aber Sie erstellen Ihr eigenes, um den Xfce-Desktop zu starten.
Da Sie die Konfiguration des VNC-Servers ändern werden, müssen Sie zunächst die VNC-Server-Instanz stoppen, die auf Port 5901
ausgeführt wird. Dazu verwenden Sie den folgenden Befehl:
- vncserver -kill :1
Die Ausgabe sollte wie folgt aussehen, auch wenn Sie eine andere PID sehen werden:
OutputKilling Xtightvnc process ID 17648
Bevor Sie die Datei xstartup
ändern, sollten Sie ein Backup der Originaldatei vornehmen:
- mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
Erstellen Sie eine neue xstartup
-Datei und öffnen Sie sie in einem Texteditor wie nano
:
- nano ~/.vnc/xstartup
Fügen Sie der Datei anschließend folgende Zeilen hinzu:
#!/bin/bash
xrdb $HOME/.Xresources
startxfce4 &
Die erste Zeile ist ein shebang. In ausführbaren Klartext-Dateien auf *nix-Plattformen weist ein shebang das System an, an welchen Interpreter die Datei zur Ausführung weitergegeben wird. In diesem Fall übergeben Sie die Datei dem Bash-Interpreter. Dies erlaubt es, jede aufeinanderfolgende Zeile als Befehl der Reihe nach auszuführen.
Der erste Befehl in der Datei, xrdb $HOME/.Xresources
weist das GUI Framework des VNC an, die .Xresources
-Datei. .
des Serverbenutzers zu lesen. Xresources ist der Ort, an dem ein Benutzer bestimmte Einstellungen des grafischen Desktops ändern kann, wie die Terminal-Farben, Cursor-Gestaltung und das Font-Rendering. Der zweite Befehl weist den Server an, Xfce zu starten. Immer, wenn Sie den VNC-Server starten oder neu starten, werden diese Befehle automatisch ausgeführt.
Speichern und schließen Sie die Datei nach dem Hinzufügen dieser Zeilen. Wenn Sie nano
verwendet haben, drücken Sie STRG+X
, Y
, dann ENTER
.
Um sicherzustellen, dass der VNC-Server diese neue Start-Datei ordnungsgemäß verwenden kann, müssen Sie sie ausführbar machen:
- chmod +x ~/.vnc/xstartup
Starten Sie den VNC-Server anschließend neu:
- vncserver -localhost
Achten Sie dieses Mal darauf, dass dieser Befehl die Option -localhost
beinhaltet, die den VNC-Server an die Loopback-Schnittstelle Ihres Servers bindet. Dadurch kann VNC nur Verbindungen zulassen, die von dem Server stammen, auf dem es installiert ist.
Im nächsten Schritt richten Sie einen SSH-Tunnel zwischen Ihrem lokalen Rechner und Ihrem Server ein und gaukeln VNC damit im Grunde vor, dass die Verbindung von Ihrem lokalen Rechner von Ihrem Server stammt. Diese Strategie fügt eine zusätzliche Sicherheitsebene um VNC herum hinzu, da die einzigen Benutzer, die darauf zugreifen können, bereits SSH-Zugriff auf Ihren Server haben.
Sie sehen eine Ausgabe, die dieser ähnelt:
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
Da die Konfiguration nun betriebsbereit ist, können Sie jetzt die Verbindung von Ihrem lokalen Rechner zum VNC-Server herstellen.
VNC selbst verwendet keine sicheren Protokolle beim Verbinden. Um sich sicher mit Ihrem Server zu verbinden, richten Sie einen SSH-Tunnel ein und weisen Ihren VNC-Client an, diesen Tunnel zu verwenden, anstatt eine direkte Verbindung herzustellen.
Erstellen Sie auf Ihrem lokalen Computer eine SSH-Verbindung, die sicher an die localhost
-Verbindung für VNC weiterleitet. Sie können dies mit folgendem ssh
-Befehl über den Terminal auf Linux oder macOS durchführen:
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
Im Folgenden wird die Bedeutung dieses ssh
-Befehls erklärt:
-L 59000:localhost:5901
: Der -L
-Schalter gibt an, dass der angegebene Port auf dem lokalen Computer (59000
) an den angegebenen Host und den Port auf dem Zielserver weitergeleitet werden soll (localhost:5901
, bedeutet Port 5901
auf dem Zielserver, definiert als your_server_ip
). Beachten Sie, dass der von Ihnen angegebene lokale Port etwas willkürlich ist. Solange der Port nicht bereits in einen anderen Dienst eingebunden ist, können Sie ihn als Weiterleitungsport für Ihren Tunnel verwenden.-C
: Dieses Flag ermöglicht eine Komprimierung, mit der die Ressourcennutzung minimiert und die Prozesse beschleunigt werden können.-N
: Diese Option weist ssh
an, dass Sie keine Remote-Befehle ausführen möchten. Diese Einstellung ist hilfreich, wenn Sie Ports lediglich weiterleiten möchten.-l sammy your_server_ip
: Mit dem -l
-Schalter legen Sie den Benutzer fest, mit dem Sie sich anmelden wollen, sobald Sie sich mit dem Server verbinden. Stellen Sie sicher, dass Sie sammy
und your_server_ip
durch den Namen Ihres Nicht-root-Benutzers und der IP-Adresse Ihres Servers ersetzen.Hinweis: Dieser Befehl richtet einen SSH-Tunnel ein, der Informationen von Port 5901
auf Ihrem VNC-Server an Port 59000
auf Ihrem lokalen Rechner über Port 22
auf jedem Rechner (den Standardport für SSH) weiterleitet. Wenn Sie dem Leitfaden für Ersteinrichtung eines Servers für Ubuntu 20.04 gefolgt sind, der als Voraussetzung gilt, haben Sie eine UFW-Regel hinzugefügt, die Verbindungen zu Ihrem Server über OpenSSH erlaubt.
Dies ist sicherer als einfach die Firewall Ihres Servers für Verbindungen zu Port 5901
zu öffnen. Denn dadurch würde jedermann über VNC auf Ihren Server zugreifen können. Durch das Verbinden eines SSH-Tunnels begrenzen Sie den VNC-Zugriff auf Computer, die bereits SSH-Zugriff auf den Server haben.
Wenn Sie PuTTY verwenden, um sich mit Ihrem Server zu verbinden, können Sie einen SSH-Tunnel erstellen, indem Sie mit der rechten Maustaste auf die obere Leiste des Terminalfensters und anschließend auf die Option Change Setting… (Einstellungen ändern) klicken:
Suchen Sie den Verbindungszweig im Menübaum auf der linken Seite des Fensters PuTTY Reconfigure (PuTTY neu konfigurieren). Erweitern Sie den SSH-Zweig und klicken Sie auf Tunnels. Geben Sie auf dem Bildschirm Options controlling SSH port forwarding (Optionen für die Steuerung der SSH-Portweiterleitung) 59000
als Quell-Port und localhost:5901
als Destination an (wie in diesem Fall):
Klicken Sie anschließend auf die Schaltfläche Add (Hinzufügen) und dann auf die Schaltfläche Apply (Anwenden), um den Tunnel zu implementieren.
Sobald der Tunnel läuft, verwenden Sie einen VNC Client, um sich mit localhost:59000
zu verbinden. Sie werden aufgefordert, sich mit dem in Schritt 1 eingestellten Passwort zu authentifizieren.
Sobald die Verbindung steht, sehen Sie den Xfce Standard-Desktop. Sie sollte ungefähr wie folgt aussehen:
Sie können mit dem Dateimanager auf Dateien in Ihrem Stammverzeichnis zugreifen oder von der Befehlszeile aus, wie nachstehend zu sehen ist:
Drücken Sie CTRL+C
auf Ihrem lokalen Terminal, um den SSH-Tunnel zu stoppen und zu Ihrer Aufforderung zurückzukehren. Damit wird auch Ihre VNC-Sitzung unterbrochen.
Jetzt können Sie Ihren VNC-Server so konfigurieren, dass er als systemd-Dienst ausgeführt wird.
Da der VNC-Server für die Ausführung als systemd-Dienst eingerichtet wurde, können Sie ihn wie jeden anderen Dienst nach Bedarf starten, anhalten und neu starten. Sie können auch die Verwaltungsbefehle von systemd nutzen, um sicherzustellen, dass VNC beim Hochfahren Ihres Servers startet.
Erstellen Sie zunächst eine Unit-Datei namens /etc/systemd/system/vncserver@.service
:
- sudo nano /etc/systemd/system/vncserver@.service
Das @
-Symbol am Ende des Namens gestattet uns, ein Argument aufzunehmen, das Sie in der Dienstkonfiguration verwenden können. Sie verwenden dies, um den VNC-Anzeige-Port anzugeben, den Sie bei der Dienstverwaltung einsetzen möchten.
Fügen Sie der Datei folgende Zeilen hinzu. Vergewissern Sie sich, dass Sie den Wert von User, Group, WorkingDirectory und den Benutzernamen im Wert von PIDFILE ändern, damit er mit Ihrem Benutzernamen übereinstimmt:
[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 er bereits läuft. Der ExecStart
Befehl startet VNC und stellt die Farbtiefe auf 24-Bit-Farbe mit einer Auflösung von 1280 x 800. Sie können diese Startoptionen auch je nach Wunsch ändern. Beachten Sie auch, dass der Befehl ExecStart
wieder die Option -localhost
beinhaltet.
Speichern und schließen Sie die Datei.
Machen Sie als Nächstes das System auf die neue Unit-Datei aufmerksam:
- sudo systemctl daemon-reload
Aktivieren Sie die Unit-Datei:
- sudo systemctl enable vncserver@1.service
Die 1
nach dem @
-Zeichen gibt an, über welche Anzeigenummer der Dienst angezeigt werden soll; in diesem Fall ist der Standard :1
, wie wir bereits in Schritt 2 besprochen haben.
Stoppen Sie die aktuelle Instanz des VNC-Servers, wenn er noch läuft:
- vncserver -kill :1
Starten Sie ihn dann wie jeden anderen systemd-Dienst:
- sudo systemctl start vncserver@1
Sie können verifizieren, dass er mit diesem Befehl gestartet wurde:
- sudo systemctl status vncserver@1
Falls er richtig gestartet wurde, sollte die Ausgabe wie folgt aussehen:
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)
...
Ihr VNC-Server ist jetzt betriebsbereit, sobald Ihr Server hochfährt, und Sie können ihn mit systemctl
-Befehlen wie jeden anderen systemd-Dienst verwalten.
Es gibt jedoch keinen Unterschied auf der Client-Seite. Um Ihren SSH-Tunnel erneut zu verbinden, starten Sie ihn erneut:
- ssh -L 59000:localhost:5901 -C -N -l sammy your_server_ip
Stellen Sie dann mit Ihrer VNC-Client-Software eine neue Verbindung zu localhost:59000
her, um sich mit Ihrem Server zu verbinden.
Jetzt läuft ein sicherer VNC-Server auf Ihrem Ubuntu 20.04 Server. Jetzt können Sie Ihre Dateien, Software und Einstellungen mit einer benutzerfreundlichen grafischen Oberfläche verwalten und grafische Software wie Web-Browser per Fernzugriff ausführen.
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!