- Einführung
- Ziele
- Voraussetzungen
- Schritt 1 – Erstellen von zwei Benutzerkonten
- Schritt 2 – Installation des GNOME-Desktops
- Fehlerbehebung – Server bleibt in der Boot-Phase stecken
- Schritt 3 – Installation von TigerVNC Server
- Schritt 4 – Konfigurieren des VNC-Dienstes für zwei Clients
- Schritt 5 – Konfigurieren der Firewall
- Schritt 6 – Festlegen von VNC-Passwörtern
- Schritt 7 – Verbindung zu entfernten Desktops mit einem VNC-Client
- Fehlerbehebung – VNC-Dienst stürzt ab
- Allgemeine Fehlerbehebung
- Schritt 8 – Absicherung von VNC-Sitzungen durch SSH-Tunneling
- Fazit
Einführung
VNC oder Virtual Network Computing ist ein plattformunabhängiges Protokoll, das es Benutzern ermöglicht, sich mit einem entfernten Computersystem zu verbinden und dessen Ressourcen über eine grafische Benutzeroberfläche (GUI) zu nutzen.
Es ist wie die Fernsteuerung einer Anwendung: Die Tastenanschläge oder Mausklicks des Client-Computers werden über das Netzwerk an den entfernten Computer übertragen. VNC ermöglicht auch die gemeinsame Nutzung der Zwischenablage zwischen beiden Computern. Wenn Sie von einem Microsoft Windows Server-Hintergrund kommen, ist VNC ähnlich wie der Remote Desktop Service, außer dass es auch für OS X, Linux und andere Betriebssysteme verfügbar ist.
Wie alles andere in der Netzwerkwelt basiert VNC auf dem Client-Server-Modell: Der VNC-Server läuft auf einem entfernten Computer – Ihrem Droplet – der die eingehenden Client-Anfragen bedient.
Ziele
In diesem Tutorial werden wir lernen, wie man einen VNC-Server auf CentOS 7 installiert und konfiguriert. Wir werden den TigerVNC-Server installieren, der im TigerVNC-GitHub-Repository frei verfügbar ist.
Um zu demonstrieren, wie VNC funktioniert, werden wir auch den GNOME-Desktop auf Ihrem CentOS-Server installieren. Wir erstellen zwei Benutzerkonten und konfigurieren den VNC-Zugang für sie. Anschließend testen wir die Verbindung zum Remote-Desktop und lernen schließlich, wie man die Remote-Verbindung durch einen SSH-Tunnel sichert.
Voraussetzungen
Die in diesem Tutorial gezeigten Befehle, Pakete und Dateien wurden auf einer Minimalinstallation von CentOS 7 getestet. Wir empfehlen die folgenden Voraussetzungen:
- Distro: CentOS 7, 64-bit
- Ressourcenanforderungen: Ein Droplet mit 2 GB RAM
- Um diesem Tutorial zu folgen, sollten Sie einen sudo-Benutzer verwenden. Um zu verstehen, wie sudo-Rechte funktionieren, können Sie dieses DigitalOcean-Tutorial lesen
Warnung: Sie sollten keine Befehle, Abfragen oder Konfigurationen aus diesem Tutorial auf einem produktiven Linux-Server ausführen. Dies könnte zu Sicherheitsproblemen und Ausfallzeiten führen.
Schritt 1 – Erstellen von zwei Benutzerkonten
Zuerst werden wir zwei Benutzerkonten erstellen. Diese Konten werden über VNC-Clients eine Fernverbindung zu unserem CentOS 7-Server herstellen.
- joevnc
- janevnc
Führen Sie den folgenden Befehl aus, um ein Benutzerkonto für joevnc hinzuzufügen:
sudo useradd -c "User Joe Configured for VNC Access" joevnc
Dann führen Sie den Befehl passwd aus, um das Kennwort von joevnc zu ändern:
sudo passwd joevnc
Die Ausgabe fragt uns nach dem neuen Kennwort. Sobald es eingegeben wurde, ist das Konto bereit für die Anmeldung:
Changing password for user joevnc.New password:Retype new password:passwd: all authentication tokens updated successfully.
Als Nächstes erstellen Sie ein Konto für janevnc:
sudo useradd -c "User Jane Configured for VNC Access" janevnc
Setzen Sie das Passwort für janevnc:
sudo passwd janevnc
Schritt 2 – Installation des GNOME-Desktops
Nun installieren wir den GNOME-Desktop. GNOME ist eine gemeinschaftliche Anstrengung: Es ist eine Sammlung von freier und quelloffener Software, die eine sehr beliebte Desktop-Umgebung darstellt. Es gibt auch andere Desktop-Umgebungen wie KDE, aber GNOME ist beliebter. Unsere VNC-Benutzer werden GNOME verwenden, um von ihrem Desktop aus mit dem Server zu interagieren:
sudo yum groupinstall -y "GNOME Desktop"
Abhängig von der Geschwindigkeit Ihres Netzwerks kann dies ein paar Minuten dauern.
Wenn die Paketgruppe installiert ist, starten Sie den Server neu:
sudo reboot
Fehlerbehebung – Server bleibt in der Boot-Phase stecken
Abhängig davon, wie Ihr Server eingerichtet wurde, kann es sein, dass der Rechner beim Starten in der Boot-Phase verbleibt und eine Meldung wie die folgende anzeigt:
Initial setup of CentOS Linux 7 (core)1) License information (Licence not accepted)Please make your choice from above :
Um dies zu umgehen, drücken Sie die Taste 1 (Lizenz lesen), dann die Taste 2 (Lizenz akzeptieren) und dann die Taste C (fortfahren). Möglicherweise müssen Sie C zwei oder mehr Mal drücken. Das Bild unten zeigt dies:
Wenn Sie diesen Fehler nicht sehen und der Bootvorgang reibungslos verläuft, umso besser – Sie können mit dem nächsten Schritt fortfahren.
Schritt 3 – Installation von TigerVNC Server
TigerVNC ist die Software, mit der wir eine Remote-Desktop-Verbindung herstellen können.
Installieren Sie den Tiger VNC Server:
sudo yum install -y tigervnc-server
Dies sollte eine Ausgabe wie die folgende zeigen:
Loaded plugins: fastestmirror, langpacksLoading mirror speeds from cached hostfile. . .Running transaction Installing : tigervnc-server-1.2.80-0.30.20130314svn5065.el7.x86_64 1/1 Verifying : tigervnc-server-1.2.80-0.30.20130314svn5065.el7.x86_64 1/1Installed: tigervnc-server.x86_64 0:1.2.80-0.30.20130314svn5065.el7Complete!
Jetzt haben wir den VNC Server und den GNOME Desktop installiert. Wir haben auch zwei Benutzerkonten für die Verbindung über VNC erstellt.
Schritt 4 – Konfigurieren des VNC-Dienstes für zwei Clients
Der VNC-Server startet nicht automatisch, wenn er zum ersten Mal installiert wird. Um dies zu überprüfen, führen Sie den folgenden Befehl aus:
sudo systemctl status vncserver@:.service
Die Ausgabe sieht dann so aus:
vncserver@:.service - Remote desktop service (VNC) Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled) Active: inactive (dead)
Sie können auch diesen Befehl ausführen:
sudo systemctl is-enabled [email protected]
Dies sollte eine Ausgabe wie diese zeigen:
disabled
Warum ist er dann deaktiviert? Das liegt daran, dass jeder Benutzer eine eigene Instanz des VNC-Dienst-Daemons startet. Mit anderen Worten, VNC wird nicht als ein einziger Prozess ausgeführt, der alle Benutzeranfragen bedient. Jeder Benutzer, der sich über VNC verbindet, muss eine neue Instanz des Daemons starten (oder der Systemadministrator kann dies automatisieren).
CentOS 7 verwendet den systemd-Daemon, um andere Dienste zu initiieren. Jeder Dienst, der nativ unter systemd läuft, hat eine Service-Unit-Datei, die vom yum-Installationsprogramm im Verzeichnis /lib/systemd/system
abgelegt wird. Prozesse, die beim Booten automatisch gestartet werden, haben einen Link zu dieser Service-Unit-Datei im Verzeichnis /etc/systemd/system/
.
In unserem Fall wurde eine generische Service-Unit-Datei im Verzeichnis /lib/systemd/system/
erstellt, aber es wurde kein Link unter /etc/systemd/system/
erstellt. Um dies zu testen, führen Sie die folgenden Befehle aus:
sudo ls -l /lib/systemd/system/vnc*
Sie sollten sehen:
-rw-r--r--. 1 root root 1744 Jun 10 16:15 /lib/systemd/system/[email protected]
Dann prüfen Sie unter /etc/systemd/system/
:
sudo ls -l /etc/systemd/system/*.wants/vnc*
Dieser existiert nicht:
ls: cannot access /etc/systemd/system/*.wants/vnc*: No such file or directory
Der erste Schritt besteht also darin, zwei neue Instanzen des VNC-Servers für unsere beiden Benutzer zu starten. Dazu müssen wir zwei Kopien der generischen VNC-Service-Unit-Datei unter /etc/system/system
erstellen. Im nachstehenden Codeschnipsel werden zwei Kopien mit zwei verschiedenen Namen erstellt:
sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:4.servicesudo cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:5.service
Warum haben wir also zwei Zahlen (zusammen mit dem Doppelpunkt) in die kopierten Dateinamen eingefügt?
Auch hier geht es wieder um das Konzept der einzelnen VNC-Dienste. VNC selbst läuft auf Port 5900. Da jeder Benutzer seinen eigenen VNC-Server betreibt, muss jeder Benutzer eine Verbindung über einen eigenen Port herstellen. Durch das Hinzufügen einer Zahl im Dateinamen wird VNC angewiesen, diesen Dienst als Unterport von 5900
auszuführen. In unserem Fall läuft der VNC-Dienst von joevnc also auf Port 5904 (5900 + 4) und der von janevnc auf 5905 (5900 + 5).
Bearbeiten Sie als Nächstes die Service-Unit-Datei für jeden Client. Öffnen Sie die Datei /etc/systemd/system/vncserver@:4.service
mit dem vi-Editor:
sudo vi /etc/systemd/system/vncserver@:4.service
Ein Blick auf den Abschnitt „Quick HowTo“ zeigt uns, dass wir den ersten Schritt bereits abgeschlossen haben. Jetzt müssen wir die restlichen Schritte durchführen. Die Kommentare sagen uns auch, dass VNC eine nicht vertrauenswürdige Verbindung ist. Wir werden später darüber sprechen.
Bearbeiten Sie jetzt den Abschnitt der Datei und ersetzen Sie die Instanzen von
<USER>
durch joevnc
. Fügen Sie außerdem die Klausel -geometry 1280x1024
am Ende des Parameters ExecStart
hinzu. Damit wird VNC lediglich mitgeteilt, mit welcher Bildschirmgröße es beginnen soll. Sie werden insgesamt zwei Zeilen ändern. So sollte die bearbeitete Datei aussehen (beachten Sie, dass nicht die gesamte Datei angezeigt wird):
# The vncserver service unit file## Quick HowTo:# 1. Copy this file to /etc/systemd/system/vncserver@:<display>.service# 2. Edit <USER> and vncserver parameters appropriately# ("runuser -l <USER> -c /usr/bin/vncserver %i -arg1 -arg2")# 3. Run `systemctl daemon-reload`# 4. Run `systemctl enable vncserver@:<display>.service`#. . .Description=Remote desktop service (VNC)After=syslog.target network.targetType=forking# Clean any existing files in /tmp/.X11-unix environmentExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'ExecStart=/sbin/runuser -l joevnc -c "/usr/bin/vncserver %i -geometry 1280x1024" PIDFile=/home/joevnc/.vnc/%H%i.pidExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'WantedBy=multi-user.target
Speichern Sie die Datei und beenden Sie vi.
Gleichermaßen öffnen Sie die Datei /etc/systemd/system/vncserver@:5.service
in vi und nehmen Sie die Änderungen für den Benutzer janevnc vor:
sudo vi /etc/systemd/system/vncserver@:5.service
Hier ist nur der Abschnitt mit den markierten Änderungen:
Type=forking# Clean any existing files in /tmp/.X11-unix environmentExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'ExecStart=/sbin/runuser -l janevnc -c "/usr/bin/vncserver %i -geometry 1280x1024"PIDFile=/home/janevnc/.vnc/%H%i.pidExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
Nächste Schritte: Führen Sie die folgenden Befehle aus, um den systemd-Daemon neu zu laden und um sicherzustellen, dass VNC für zwei Benutzer beim Booten gestartet wird.
sudo systemctl daemon-reload
Aktivieren Sie die erste Serverinstanz:
sudo systemctl enable vncserver@:4.service
Ausgabe:
ln -s '/etc/systemd/system/vncserver@:4.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:4.service'
Aktivieren Sie die zweite Serverinstanz:
sudo systemctl enable vncserver@:5.service
Ausgabe:
ln -s '/etc/systemd/system/vncserver@:5.service' '/etc/systemd/system/multi-user.target.wants/vncserver@:5.service'
Nun haben Sie zwei VNC-Serverinstanzen konfiguriert.
Schritt 5 – Konfigurieren der Firewall
Als nächstes müssen wir die Firewall so konfigurieren, dass der VNC-Verkehr nur über die Ports 5904 und 5905 zugelassen wird. CentOS 7 verwendet die dynamische Firewall über den firewalld-Daemon; der Dienst muss nicht neu gestartet werden, damit die Änderungen wirksam werden.
Der firewalld-Dienst sollte beim Systemstart automatisch starten, aber es ist immer gut, dies zu überprüfen:
sudo firewall-cmd --state
Dies sollte anzeigen:
running
Wenn der Status aus irgendeinem Grund „nicht läuft“ ist, führen Sie den folgenden Befehl aus, um sicherzustellen, dass er läuft:
sudo systemctl start firewalld
Fügen Sie nun die Regeln für die Ports 5904 und 5905 hinzu:
sudo firewall-cmd --permanent --zone=public --add-port=5904-5905/tcp
Ausgabe:
success
Reload the firewall:
sudo firewall-cmd --reload
Ausgabe:
success
Schritt 6 – Festlegen von VNC-Passwörtern
Wir sind einen Schritt davon entfernt, VNC in Aktion zu sehen. In diesem Schritt müssen die Benutzer ihre VNC-Passwörter festlegen. Dabei handelt es sich nicht um die Linux-Passwörter der Benutzer, sondern um die Passwörter für die Anmeldung bei den VNC-Sitzungen.
Öffnen Sie eine weitere Terminalverbindung zum CentOS 7-Server, und melden Sie sich diesmal als joevnc an.
ssh joevnc@your_server_ip
Führen Sie den folgenden Befehl aus:
vncserver
Wie in der folgenden Ausgabe zu sehen ist, fordert der Server joevnc auf, ein VNC-Passwort einzurichten. Nach der Eingabe des Passworts zeigt das Programm auch eine Reihe von Dateien an, die im Home-Verzeichnis des Benutzers erstellt werden:
You will require a password to access your desktops.Password:Verify:xauth: file /home/joevnc/.Xauthority does not existNew 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1Creating default startup script /home/joevnc/.vnc/xstartupStarting applications specified in /home/joevnc/.vnc/xstartupLog file is /home/joevnc/.vnc/localhost.localdomain:1.log
Schauen wir uns die Zeile New 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1
an. localhost.localdomain war der Servername in unserem Beispiel; in Ihrem Fall könnte er anders lauten. Beachten Sie die Zahl nach dem Servernamen: (1, getrennt durch einen Doppelpunkt). Es ist nicht die Zahl in der Service-Unit-Datei von joevnc (die 4 war). Das liegt daran, dass dies die Anzeigenummer ist, unter der die Sitzung von joevnc auf diesem Server läuft, nicht die Portnummer des Dienstes (5904
) selbst.
Nächste öffnen Sie eine neue Terminalsitzung und melden sich als janevnc an. Starten Sie auch hier den VNC-Server und setzen Sie ein Kennwort für janevnc:
vncserver
Sie sollten eine ähnliche Ausgabe sehen, die zeigt, dass die Sitzung von janevnc auf Display 2 läuft.
Schliesslich laden Sie die Dienste aus der Hauptterminalsitzung neu:
sudo systemctl daemon-reloadsudo systemctl restart vncserver@:4.servicesudo systemctl restart vncserver@:5.service
Schritt 7 – Verbindung zu entfernten Desktops mit einem VNC-Client
Für dieses Tutorial nehmen wir an, dass die Benutzer joevnc und janevnc versuchen, sich von ihren Windows-Computern aus mit dem CentOS 7-Server zu verbinden.
Sie benötigen jeweils einen VNC-Client für Windows, um sich beim entfernten Desktop anzumelden. Dieser Client ist genau wie ein Terminal-Client wie PuTTY, nur dass er eine grafische Ausgabe zeigt. Es gibt verschiedene VNC-Clients, aber derjenige, den wir verwenden werden, ist RealVNC, erhältlich hier. VNC Viewer für Mac OS X kann auf der gleichen Seite heruntergeladen werden, und die Mac-Version ist der Windows-Version ziemlich ähnlich.
Wenn VNC Viewer gestartet wird, erscheint ein Dialogfeld wie dieses:
In das Feld VNC Server geben Sie die IP-Adresse Ihres CentOS 7-Servers ein. Geben Sie nach der IP-Adresse des Servers die Portnummer 5904 an, getrennt durch einen Doppelpunkt (:). Wir haben 5904 verwendet, weil dies der Port des VNC-Dienstes für joevnc ist.
Wir haben uns auch entschieden, VNC Viewer die Verschlüsselungsmethode wählen zu lassen. Mit dieser Option wird nur das über das Netzwerk gesendete Passwort verschlüsselt. Jede weitere Kommunikation mit dem Server wird unverschlüsselt sein. (Wir werden im letzten Schritt einen sicheren SSH-Tunnel einrichten.)
In der Tat zeigt eine Warnmeldung genau das an:
Akzeptieren Sie die Warnung vorerst. Eine Passwortabfrage wird angezeigt:
Geben Sie das VNC-Passwort von joevnc ein, das Sie zuvor festgelegt haben.
Ein neues Fenster öffnet sich und zeigt den GNOME-Desktop für unseren entfernten CentOS-Server an:
Akzeptieren Sie die Standardbegrüßungsmeldung.
Jetzt kann joevnc ein grafisches Tool wie den GNOME-Rechner starten:
Sie können diese Desktop-Verbindung offen lassen.
Jetzt kann janevnc auch eine weitere VNC-Sitzung mit dem CentOS-Server starten. Die IP-Adresse ist die gleiche und der Port ist 5905:
Wenn sich janevnc über VNC Viewer anmeldet, wird ein leerer Desktop mit einer Willkommensnachricht angezeigt, genau wie bei joevnc. Mit anderen Worten, die beiden Benutzer teilen sich die Desktop-Instanzen nicht. Auf dem Desktop von joevnc sollte immer noch der Rechner angezeigt werden.
Um die Remote-Desktop-Sitzung zu beenden, genügt es, das Fenster zu schließen. Dies stoppt jedoch nicht den VNC-Dienst des Benutzers im Hintergrund auf dem Server. Wenn der Dienst nicht gestoppt oder neu gestartet wird und der Rechner nicht neu gebootet wurde, wird bei der nächsten Anmeldung dieselbe Desktop-Sitzung angezeigt.
Schließen Sie die VNC-Viewer-Fenster für joevnc und janevnc. Schließen Sie auch deren Terminalsitzungen. Prüfen Sie im Hauptterminalfenster, ob die VNC-Dienste noch laufen:
sudo systemctl status vncserver@:4.service
Die Ausgabe zeigt, dass der Remote-Desktop noch läuft:
vncserver@:4.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:4.service; enabled) Active: active (running) since Sat 2014-11-01 12:06:49 EST; 58min ago Process: 2014 ExecStart=/sbin/runuser -l joevnc -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=0/SUCCESS). . .
Prüfen Sie den zweiten Dienst:
sudo systemctl status vncserver@:5.service
Dieser läuft auch:
vncserver@:5.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:5.service; enabled) Active: active (running) since Sat 2014-11-01 12:42:56 EST; 22min ago Process: 3748 ExecStart=/sbin/runuser -l janevnc -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=0/SUCCESS). . .
Wenn Sie sich jetzt wieder am Desktop von joevnc anmelden wollen, sehen Sie dieselbe Taschenrechner-App geöffnet.
Dies stellt Systemadministratoren vor einige interessante Herausforderungen. Wenn Sie eine Reihe von Benutzern haben, die sich über VNC mit dem Server verbinden, sollten Sie eine Möglichkeit finden, deren VNC-Dienste zu beenden, wenn sie nicht mehr benötigt werden. Dies kann wertvolle Systemressourcen einsparen.
Fehlerbehebung – VNC-Dienst stürzt ab
Wenn Sie VNC testen und damit herumspielen, kann es vorkommen, dass der Dienst abstürzt und nicht wiederherstellbar ist. Wenn Sie versuchen, den Status zu überprüfen:
sudo systemctl status vncserver@:4.service
Diese lange Fehlermeldung kann erscheinen:
vncserver@:4.service - Remote desktop service (VNC) Loaded: loaded (/etc/systemd/system/vncserver@:4.service; enabled) Active: failed (Result: exit-code) since Fri 2014-11-07 00:02:38 EST; 2min 20s ago Process: 2221 ExecStart=/sbin/runuser -l joevnc -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=2) Process: 1257 ExecStartPre=/bin/sh -c /usr/bin/vncserver -kill %i > /dev/null 2>&1 || : (code=exited, status=0/SUCCESS)
Der Versuch, den Dienst zu starten, funktioniert nicht:
sudo systemctl start vncserver@:4.service
Fehlgeschlagener Start:
Job for vncserver@:4.service failed. See 'systemctl status vncserver@:4.service' and 'journalctl -xn' for details.
In der Regel ist der Grund einfach genug. Prüfen Sie /var/log/messages
:
sudo tail /var/log/messages
Der zugehörige Fehler sieht so aus:
Nov 7 00:08:36 localhost runuser: Warning: localhost.localdomain:4 is taken because of /tmp/.X11-unix/X4Nov 7 00:08:36 localhost runuser: Remove this file if there is no X server localhost.localdomain:4Nov 7 00:08:36 localhost runuser: A VNC server is already running as :4Nov 7 00:08:36 localhost systemd: vncserver@:4.service: control process exited, code=exited status=2Nov 7 00:08:36 localhost systemd: Failed to start Remote desktop service (VNC).Nov 7 00:08:36 localhost systemd: Unit vncserver@:4.service entered failed state.Nov 7 00:08:36 localhost systemd: Failed to mark scope session-c3.scope as abandoned : Stale file handle
Die Abhilfe ist, die Datei unter dem Ordner /tmp zu löschen:
sudo rm -i /tmp/.X11-unix/X4
Ausgabe:
rm: remove socket '/tmp/.X11-unix/X4'? y
Starten Sie dann den VNC-Dienst:
sudo systemctl start vncserver@:4.service
Allgemeine Fehlerbehebung
Auch wenn es relativ selten ist, können bei der Arbeit mit VNC andere Fehler auftreten. Zum Beispiel kann der Bildschirm des entfernten Desktops leer sein oder hängen, die Sitzung kann mit einer kryptischen Fehlermeldung abstürzen, der VNC-Viewer kann sich nicht richtig verbinden oder Befehle an die grafische Benutzeroberfläche übertragen, um Anwendungen zu starten, usw.
Wir empfehlen, die Datei /var/log/messages
zu überprüfen, um ein besseres Verständnis zu bekommen. Manchmal müssen Sie Ihren Server neu starten oder in extremen Fällen den VNC-Dienst neu erstellen.
Systemressourcen können auch ein Grund dafür sein; möglicherweise müssen Sie Ihrem Droplet zusätzlichen Arbeitsspeicher hinzufügen usw.
Schritt 8 – Absicherung von VNC-Sitzungen durch SSH-Tunneling
Bislang haben sowohl joevnc als auch janevnc über unverschlüsselte Kanäle auf ihre Remote-Desktops zugegriffen. Wie wir bereits gesehen haben, warnt uns VNC Viewer zum Zeitpunkt der Verbindung; nur das Passwort wird zu Beginn der Sitzung verschlüsselt. Jeder nachfolgende Netzwerkverkehr und Datentransfer kann von jedem abgefangen werden.
Über SSH-Tunneling
Hier können Secure Shell (SSH) Sitzungen helfen. Mit SSH kann VNC im Kontext einer SSH-verschlüsselten Sitzung ausgeführt werden. Dies wird als Tunneln bezeichnet. Der VNC-Verkehr wird über das SSH-Protokoll abgewickelt, wodurch die gesamte Kommunikation mit dem Server verschlüsselt wird. Man nennt es Tunneln, weil SSH einen Rundumschutz für VNC bietet und VNC wie in einem Tunnel innerhalb von SSH läuft. SSH-Tunneling kann auch für andere Protokolle wie POP, X oder IMAP verwendet werden.
SSH-Tunneling funktioniert mit Port-Weiterleitung, was im Grunde eine Möglichkeit ist, den Zugriff von einem bestimmten Port auf einen anderen Port auf einem anderen Rechner zu übersetzen. Wenn eine Client-Anwendung eine Verbindung zu Port A auf Rechner A herstellt, wird sie transparent an Port B auf Rechner B weitergeleitet. Die Client-Anwendung weiß nichts von dieser Übersetzung und denkt, dass sie sich mit dem ursprünglichen Port verbindet. Portweiterleitung ist eine der Funktionen des SSH-Protokolls.
Für weitere Informationen über SSH-Tunneling lesen Sie dieses Tutorial.
In diesem Tutorial haben wir VNC so konfiguriert, dass es auf den Ports 5904 (für joevnc) und 5905 (für janevnc) läuft.
Mit der Portweiterleitung können wir unseren lokalen VNC-Client so einstellen, dass er sich mit Port 5900 auf dem lokalen Client-Computer verbindet, und dieser kann auf Port 5905 auf dem Remote-Server abgebildet werden. Dieses Beispiel bezieht sich auf die Verbindung von janevnc, aber Sie können die gleichen Schritte auch für andere Clients durchführen.
Wenn die VNC-Client-Anwendung startet, kann sie auf Port 5900 auf localhost verwiesen werden, und unsere Portweiterleitung wird sie transparent zu Port 5905 auf dem Remote-Server transportieren.
Hinweis: Sie müssen jedes Mal einen SSH-Abschnitt starten, um die Verbindung sicher zu machen.
OS X
Öffnen Sie auf Ihrem Mac Terminal.
Geben Sie die folgenden Verbindungsinformationen ein, wobei Sie your_server_ip
durch die IP-Adresse des Remote-Servers ersetzen müssen:
ssh -L 5900:your_server_ip:5905 janevnc@your_server_ip -N
Geben Sie das UNIX-Passwort von janevnc ein. Die Verbindung scheint zu hängen; Sie können sie so lange aufrecht erhalten, wie Sie den Remote-Desktop verwenden.
Springen Sie nun zu den Anweisungen für den VNC-Viewer.
Windows
Um die VNC-Sitzung von janevnc zu sichern, gehen wir davon aus, dass auf dem lokalen Windows-Computer PuTTY installiert ist. PuTTY ist kostenlos und kann von hier heruntergeladen werden.
Wenn die VNC- und Terminal-Sitzungen von janevnc nicht bereits geschlossen sind, schließen Sie sie jetzt.
Starten Sie PuTTY. Geben Sie im Sitzungsbildschirm die IP-Adresse des Servers und einen beschreibenden Namen für die Verbindung an und klicken Sie dann auf die Schaltfläche Speichern, um die Verbindungsdetails zu speichern. Beachten Sie, dass wir username@your_server_ip
im Feld Hostname angegeben haben:
Nächste Schritte: Erweitern Sie den Menüpunkt SSH im linken Navigationsbereich und wählen Sie den Punkt X11. Dadurch werden die X11-Weiterleitungseigenschaften für die Sitzung angezeigt. Stellen Sie sicher, dass das Kontrollkästchen für X11-Weiterleitung aktivieren aktiviert ist. Dadurch wird sichergestellt, dass SSH den X-Windows-Verkehr verschlüsselt, der zwischen dem Server und dem Client fließt:
Schließlich wählen Sie SSH > Tunnels. Geben Sie 5900
in das Feld Quellport ein. Im Feld Ziel geben Sie den Namen oder die IP-Adresse Ihres Servers ein, gefolgt von einem Doppelpunkt und der VNC-Portnummer für den gewünschten Benutzer. In unserem Fall haben wir your_server_ip:5905
.
angegeben. Alternativ könnten Sie auch Port 5902 verwenden. Die 2 wäre in diesem Fall die Anzeigenummer für janevnc (erinnern Sie sich an die Meldung, die angezeigt wird, wenn janevnc den Befehl vncserver
ausführt).
Klicken Sie auf die Schaltfläche Hinzufügen und die Zuordnung wird unter Weitergeleitete Ports hinzugefügt. Hier fügen wir die Portweiterleitung für die SSH-Sitzung hinzu; wenn der Benutzer eine Verbindung zu localhost an Port 5900 herstellt, wird die Verbindung automatisch über SSH zum Port 5905 des Remote-Servers getunnelt.
Gehen Sie zurück zu den Elementen Sitzungen und speichern Sie die Sitzung für janevnc. Klicken Sie auf die Schaltfläche Öffnen und eine neue Terminalsitzung für janevnc wird geöffnet. Melden Sie sich als janevnc mit dem entsprechenden UNIX-Passwort an:
VNC Viewer
Starten Sie anschließend erneut VNC Viewer. Diesmal geben Sie in die VNC-Serveradresse <^> ein und lassen den VNC-Server die Verschlüsselungsmethode wählen:
Klicken Sie auf die Schaltfläche Verbinden.
Sie erhalten immer noch das Dialogfeld, das Sie vor einer unverschlüsselten Sitzung warnt, aber dieses Mal können Sie es getrost ignorieren. VNC Viewer kennt den Port nicht, an den er weitergeleitet wird (dieser wurde in der soeben gestarteten SSH-Sitzung festgelegt), und geht davon aus, dass Sie versuchen, eine Verbindung zum lokalen Rechner herzustellen.
Wenn Sie diese Warnung akzeptieren, erscheint die bekannte Passwortabfrage. Geben Sie das VNC-Passwort von janevnc ein, um auf den entfernten Desktop zuzugreifen.
Woher wissen Sie nun, dass die Sitzung verschlüsselt war? Wenn Sie darüber nachdenken, hatten wir in der SSH-Sitzung eine Portweiterleitung eingerichtet. Wäre keine SSH-Sitzung aufgebaut worden, hätte die Portweiterleitung nicht funktioniert. Wenn Sie das Terminalfenster schließen und sich von der PuTTY-Sitzung abmelden und dann versuchen, eine Verbindung mit VNC Viewer allein herzustellen, würde ein Verbindungsversuch zu localhost:5900
die folgende Fehlermeldung anzeigen:
Wenn also die localhost:5900
-Verbindung funktioniert, können Sie sicher sein, dass die Verbindung verschlüsselt ist.
Erinnern Sie sich daran, dass Sie jedes Mal, wenn Sie VNC verwenden, zuerst die SSH-Verbindung herstellen müssen, um sicherzustellen, dass Ihre Verbindung immer verschlüsselt ist.
Fazit
Der Zugriff auf Ihr CentOS-Linux-System über ein GUI-Frontend kann die Systemadministration wesentlich vereinfachen. Sie können sich von jedem Client-Betriebssystem aus verbinden und sind nicht auf webbasierte Hosting-Control-Panels angewiesen. VNC ist im Vergleich zu den meisten Control Panels viel kleiner.
Wir haben zwar gezeigt, wie zwei normale Benutzer mit ihren VNC-Clients eine Verbindung herstellen können, aber in ernsthaften Produktionsumgebungen ist das kaum praktikabel. In der Realität werden die Benutzer angepasste Anwendungen oder Browser für den Zugriff auf den Server haben. Die Ausführung einer Reihe von VNC-Diensten für jeden Benutzer belastet außerdem unnötig die Systemressourcen, ganz zu schweigen von den damit verbundenen Risiken.
Wenn Sie sich entscheiden, VNC auf Ihrem Linux-Produktionsserver zu installieren und auszuführen, empfehlen wir dringend, es nur für administrative Zwecke zu verwenden.