So installieren und konfigurieren Sie VNC Remote Access für GNOME Desktop unter CentOS 7

Einführung

  • VNC * oder Virtual Network Computing ist ein plattformunabhängiges Protokoll, mit dem Benutzer eine Verbindung zu einem Remotecomputersystem herstellen und seine Ressourcen über eine grafische Benutzeroberfläche (GUI) verwenden können.

Es ist wie bei der Remotesteuerung einer Anwendung: Die Tastatureingaben oder Mausklicks des Clientcomputers werden über das Netzwerk an den Remotecomputer übertragen. VNC ermöglicht auch die gemeinsame Nutzung der Zwischenablage zwischen beiden Computern. Wenn Sie einen Microsoft Windows-Server-Hintergrund haben, ähnelt VNC dem Remotedesktopdienst, ist jedoch auch für OS X, Linux und andere Betriebssysteme verfügbar.

Wie alles in der Netzwerkwelt basiert VNC auf dem Client-Server-Modell: Der VNC-Server wird auf einem Remotecomputer - Ihrem Droplet - ausgeführt, der eingehende Client-Anforderungen bedient.

Tore

In diesem Tutorial erfahren Sie, wie Sie einen VNC-Server unter CentOS 7 installieren und konfigurieren. Wir werden den TigerVNC-Server installieren, der unter TigerVNC GitHub repository frei verfügbar ist.

Um zu demonstrieren, wie VNC funktioniert, installieren wir auch den GNOME-Desktop auf Ihrem CentOS-Server. Wir werden zwei Benutzerkonten erstellen und den VNC-Zugriff für sie konfigurieren. Anschließend testen wir ihre Konnektivität mit dem Remotedesktop und lernen schließlich, wie die Remoteverbindung über einen SSH-Tunnel gesichert wird.

Voraussetzungen

Die in diesem Lernprogramm gezeigten Befehle, Pakete und Dateien wurden unter einer Minimalinstallation von CentOS 7 getestet. Wir würden folgendes empfehlen:

  • * Distribution *: CentOS 7, 64-Bit

  • * Ressourcenanforderungen *: Ein Droplet mit 2 GB RAM

  • Um diesem Tutorial zu folgen, sollten Sie einen sudo-Benutzer verwenden. Informationen zur Funktionsweise von sudo-Berechtigungen finden Sie unter this DigitalOcean tutorial.

_ Warnung: Sie sollten in diesem Lernprogramm keine Befehle, Abfragen oder Konfigurationen auf einem Produktions-Linux-Server ausführen. Dies kann zu Sicherheitsproblemen und Ausfallzeiten führen. _

Schritt 1 - Erstellen von zwei Benutzerkonten

Zunächst erstellen wir zwei Benutzerkonten. Diese Konten stellen von VNC-Clients aus eine Remoteverbindung zu unserem CentOS 7-Server her.

  • 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

Führen Sie dann den Befehl aus, um das Passwort von * joevnc * zu ändern:

sudo passwd joevnc

Die Ausgabe wird uns nach einem neuen Passwort fragen. Nach der Auslieferung ist das Konto für die Anmeldung bereit:

Changing password for user joevnc.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Erstellen Sie als Nächstes ein Konto für * janevnc *:

sudo useradd -c "User Jane Configured for VNC Access" janevnc

Legen Sie das Passwort für * janevnc * fest:

sudo passwd janevnc

Schritt 2 - Installieren von GNOME Desktop

Nun werden wir GNOME Desktop installieren. GNOME ist eine gemeinschaftliche Anstrengung: Es ist eine Sammlung kostenloser und Open-Source-Software, die eine sehr beliebte Desktop-Umgebung ausmacht. Es gibt andere Desktop-Umgebungen wie KDE, aber GNOME ist populärer. Unsere VNC-Benutzer verwenden GNOME, um vom Desktop aus mit dem Server zu interagieren:

sudo yum groupinstall -y "GNOME Desktop"

Abhängig von der Geschwindigkeit Ihres Netzwerks kann dies einige Minuten dauern.

Starten Sie den Server nach der Installation der Paketgruppe neu:

sudo reboot

Fehlerbehebung - Server steckt in der Startphase fest

Je nachdem, wie Ihr Server eingerichtet wurde, verbleibt er beim Start des Computers möglicherweise in der Startphase und zeigt eine Meldung wie die folgende an:

Initial setup of CentOS Linux 7 (core)
1) [!] License information (Licence not accepted)
Please make your choice from above ['q' to quit | 'c' to continue | 'r' to refresh]:

Um dies zu umgehen, drücken Sie * 1 * (Lizenz lesen), dann * 2 * (Lizenz akzeptieren) und dann * C * (um fortzufahren). Möglicherweise müssen Sie zweimal oder mehrmals * C * drücken. Das Bild unten zeigt dies:

image: https: //assets.digitalocean.com/articles/Install_VNC_Gnome/1.jpg [Boot-Phase-Meldung in CentOS 7 nach der Installation von GNOME Desktop]

Wenn dieser Fehler nicht angezeigt wird und der Startvorgang reibungslos verläuft, können Sie mit dem nächsten Schritt fortfahren.

Schritt 3 - TigerVNC Server installieren

TigerVNC ist die Software, mit der wir eine Remotedesktopverbindung herstellen können.

Installieren Sie den Tiger VNC-Server:

sudo yum install -y tigervnc-server

Dies sollte die Ausgabe wie folgt anzeigen:

Loaded plugins: fastestmirror, langpacks
Loading 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/1

Installed:
 tigervnc-server.x86_64 0:1.2.80-0.30.20130314svn5065.el7

Complete!

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 wird bei der Erstinstallation nicht automatisch gestartet. Führen Sie den folgenden Befehl aus, um dies zu überprüfen:

sudo systemctl status vncserver@:.service

Die Ausgabe wird folgendermaßen aussehen:

vncserver@:.service - Remote desktop service (VNC)
  Loaded: loaded (/usr/lib/systemd/system/[email protected]; disabled)
  Active: inactive (dead)

Sie können diesen Befehl auch ausführen:

sudo systemctl is-enabled [email protected]

Dies sollte die Ausgabe folgendermaßen anzeigen:

disabled

Warum ist es also deaktiviert? Dies liegt daran, dass jeder Benutzer eine separate Instanz des VNC-Service-Daemons startet. Mit anderen Worten, VNC wird nicht als ein einzelner Prozess ausgeführt, der jede Benutzeranforderung 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 Daemon, um andere Dienste zu initiieren. Jeder Dienst, der nativ unter systemd ausgeführt wird, verfügt über eine Service-Unit-Datei, die vom yum-Installationsprogramm im Verzeichnis "+ / lib / systemd / system " abgelegt wird. Bei Prozessen, die beim Booten automatisch gestartet werden, befindet sich eine Verknüpfung 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, es wurde jedoch keine Verknüpfung unter " / etc / systemd / system / +" hergestellt. Führen Sie die folgenden Befehle aus, um dies zu testen:

sudo ls -l /lib/systemd/system/vnc*

Das solltest du sehen:

-rw-r--r--. 1 root root 1744 Jun 10 16:15 /lib/systemd/system/[email protected]

Dann überprüfen Sie unter + / etc / systemd / system / +:

sudo ls -l /etc/systemd/system/*.wants/vnc*

Dieses 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 folgenden Code-Snippet erstellen Sie zwei Kopien mit zwei verschiedenen Namen:

sudo cp /lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:4.service

sudo 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?

Dies kommt wiederum auf das Konzept der einzelnen VNC-Dienste zurück. VNC selbst läuft auf Port. Da jeder Benutzer einen eigenen VNC-Server betreibt, muss jeder Benutzer eine Verbindung über einen separaten Port herstellen. Das Hinzufügen einer Nummer im Dateinamen weist VNC an, diesen Dienst als sub-port von + 5900 + auszuführen. In unserem Fall wird der VNC-Dienst von * joevnc * auf Port (5900 + 4) und der von * janevnc * auf Port (5900 + 5) ausgeführt.

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 Editor * vi *:

sudo vi /etc/systemd/system/vncserver@:4.service

Ein Blick in den Abschnitt „Kurzanleitung“ zeigt uns, dass wir den ersten Schritt bereits abgeschlossen haben. Jetzt müssen wir die restlichen Schritte durchgehen. Die Kommentare sagen uns auch, dass VNC eine nicht vertrauenswürdige Verbindung ist. Wir werden später darüber sprechen.

Bearbeiten Sie vorerst den Abschnitt "+ [Service] " der Datei und ersetzen Sie die Instanzen von " <USER> " durch "+". Fügen Sie außerdem die Klausel + -geometry 1280x1024 + am Ende des Parameters + ExecStart + hinzu. Dies teilt VNC nur die Bildschirmgröße mit, in der es starten soll. Sie ändern insgesamt zwei Zeilen. 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`
#

. . .

[Unit]
Description=Remote desktop service (VNC)
After=syslog.target network.target

[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l  -c "/usr/bin/vncserver %i "
PIDFile=/home//.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

[Install]
WantedBy=multi-user.target

Speichern Sie die Datei und beenden Sie vi.

Öffnen Sie auf ähnliche Weise 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 "+ [Service] +" mit den markierten Änderungen:

[Service]
Type=forking
# Clean any existing files in /tmp/.X11-unix environment
ExecStartPre=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'
ExecStart=/sbin/runuser -l  -c "/usr/bin/vncserver %i "
PIDFile=/home//.vnc/%H%i.pid
ExecStop=/bin/sh -c '/usr/bin/vncserver -kill %i > /dev/null 2>&1 || :'

Führen Sie als Nächstes die folgenden Befehle aus, um den Dämon neu zu laden und sicherzustellen, dass VNC zum Startzeitpunkt für zwei Benutzer 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'

Jetzt haben Sie zwei VNC-Serverinstanzen konfiguriert.

Schritt 5 - Konfigurieren Ihrer 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 eine dynamische Firewall über den Dämon. Der Dienst muss nicht neu gestartet werden, damit die Änderungen wirksam werden.

Der Dienst sollte automatisch beim Systemstart gestartet werden. Es ist jedoch immer gut zu überprüfen, ob:

sudo firewall-cmd --state

Dies sollte zeigen:

running

Wenn der Status aus irgendeinem Grund nicht ausgeführt wird, führen Sie den folgenden Befehl aus, um sicherzustellen, dass er ausgeführt wird:

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

Laden Sie die Firewall neu:

sudo firewall-cmd --reload

Ausgabe:

success

Schritt 6 - Einrichten 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. Dies sind nicht die Linux-Kennwörter der Benutzer, sondern die Kennwörter für die Anmeldung bei den VNC-Sitzungen.

Öffnen Sie eine andere Terminalverbindung zum CentOS 7-Server und melden Sie sich diesmal als * joevnc * an.

ssh joevnc@

Führen Sie den folgenden Befehl aus:

vncserver

Wie in der Ausgabe unten gezeigt, fordert der Server * joevnc * auf, ein VNC-Passwort einzurichten. Nach dem Eingeben 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 exist

New 'localhost.localdomain:1 (joevnc)' desktop is localhost.localdomain:1

Creating default startup script /home/joevnc/.vnc/xstartup
Starting applications specified in /home/joevnc/.vnc/xstartup
Log file is /home/joevnc/.vnc/localhost.localdomain:1.log

Sehen wir uns die Zeile "+ Neu" an. Localhost.localdomain: 1 (joevnc) "desktop is localhost.localdomain: 1 ". * localhost.localdomain * war in unserem Beispiel der Servername. in deinem Fall könnte es anders sein. Notieren Sie die Nummer nach dem Servernamen: (* 1 *, durch einen Doppelpunkt getrennt). Dies ist nicht die Nummer in der Service-Unit-Datei von * joevnc * (die * 4 * lautete). Das liegt daran, dass dies die _display number_ * joevnc * -Sitzung ist, die auf diesem Server ausgeführt wird, nicht die Portnummer des Dienstes (` 5904 +`).

Öffnen Sie anschließend eine neue Terminalsitzung und melden Sie sich als * janevnc * an. Starten Sie auch hier den VNC-Server und legen Sie ein Passwort für * janevnc * fest:

vncserver

Sie sollten eine ähnliche Ausgabe sehen, die zeigt, dass die Sitzung von * janevnc * auf dem Display * 2 * ausgeführt wird.

Zuletzt laden Sie die Dienste von der * Hauptterminalsitzung * neu:

sudo systemctl daemon-reload
sudo systemctl restart vncserver@:4.service
sudo systemctl restart vncserver@:5.service

Schritt 7 - Herstellen einer Verbindung zu Remote-Desktops mit einem VNC-Client

In diesem Tutorial wird davon ausgegangen, dass die Benutzer * joevnc * und * janevnc * versuchen, von ihren Windows-Computern aus eine Verbindung zum CentOS 7-Server herzustellen.

Sie benötigen jeweils einen VNC-Client für Windows, um sich beim Remotedesktop anzumelden. Dieser Client ähnelt einem Terminal-Client wie PuTTY, zeigt jedoch eine grafische Ausgabe an. Es stehen verschiedene VNC-Clients zur Verfügung. Wir werden jedoch RealVNC verwenden, das unter here verfügbar ist. VNC Viewer für Mac OS X steht auf derselben Seite zum Download zur Verfügung, und die Mac-Version ist der Windows-Version ziemlich ähnlich.

Wenn VNC Viewer gestartet wird, wird ein Dialogfeld wie das folgende angezeigt:

Fügen Sie im Feld * VNC Server * die IP-Adresse Ihres CentOS 7-Servers hinzu. Geben Sie die Portnummer nach der IP des Servers an, getrennt durch einen Doppelpunkt (*: *). Wir haben verwendet, weil dies der VNC-Service-Port für * joevnc * ist.

Wir haben uns auch dafür entschieden, dass VNC Viewer die Verschlüsselungsmethode wählt. Diese Option verschlüsselt nur das über das Netzwerk gesendete Passwort. Jede nachfolgende Kommunikation mit dem Server wird unverschlüsselt. (Im letzten Schritt richten wir einen sicheren SSH-Tunnel ein.)

image: https://assets.digitalocean.com/articles/Install_VNC_Gnome/3.jpg [Verbindung mit CentOS 7-Server mit RealVNC-Viewer als Joevnc]

In der Tat zeigt eine Warnmeldung genau das:

Akzeptiere die Warnung jetzt. Eine Passwortabfrage wird angezeigt:

Geben Sie das zuvor festgelegte VNC-Passwort von * joevnc * ein.

Ein neues Fenster mit dem GNOME-Desktop für unseren entfernten CentOS-Server wird geöffnet:

Akzeptieren Sie die Standard-Willkommensnachricht.

Jetzt kann * joevnc * ein grafisches Tool wie den GNOME-Rechner starten:

image: https: //assets.digitalocean.com/articles/Install_VNC_Gnome/7.jpg [Starten des GNOME-Rechners vom Remote-Desktop]

Sie können diese Desktop-Verbindung offen lassen.

Jetzt kann * janevnc * auch eine andere VNC-Sitzung mit dem CentOS-Server starten. Die IP-Adresse ist dieselbe und der Port lautet:

image: https: //assets.digitalocean.com/articles/Install_VNC_Gnome/9.jpg [Verbinden mit CentOS 7-Server mit RealVNC-Viewer als janevnc]

Wenn sich * janevnc * über VNC Viewer anmeldet, wird ein leerer Desktop mit einer Begrüßungsnachricht angezeigt, genau wie sie für * joevnc * angezeigt wurde. Mit anderen Worten, die beiden Benutzer geben die Desktop-Instanzen nicht frei. Auf dem Desktop von * joevnc * sollte weiterhin der Taschenrechner angezeigt werden.

Um die Remotedesktopsitzung zu schließen, reicht es aus, 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 Computer nicht neu gestartet wurde, wird dieselbe Desktopsitzung bei der nächsten Anmeldung angezeigt.

Schließen Sie die VNC Viewer-Fenster für * joevnc * und * janevnc *. Schließen Sie auch ihre Terminalsitzungen. Überprüfen Sie im Hauptterminalfenster, ob die VNC-Dienste noch ausgeführt werden:

sudo systemctl status vncserver@:4.service

Die Ausgabe zeigt, dass der Remotedesktop noch ausgeführt wird:

vncserver@:4.service - Remote desktop service (VNC)
  Loaded:
  Active:  since Sat 2014-11-01 12:06:49 EST; 58min ago
 Process: 2014 ExecStart=/sbin/runuser -l  -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=0/SUCCESS)

. . .

Überprüfen Sie den zweiten Dienst:

sudo systemctl status vncserver@:5.service

Dieser läuft auch:

vncserver@:5.service - Remote desktop service (VNC)
  Loaded:
  Active:  since Sat 2014-11-01 12:42:56 EST; 22min ago
 Process: 3748 ExecStart=/sbin/runuser -l  -c /usr/bin/vncserver %i -geometry 1280x1024 (code=exited, status=0/SUCCESS)

. . .

Wenn Sie sich zu diesem Zeitpunkt wieder auf dem Desktop von * joevnc * anmelden möchten, wird dieselbe Rechner-App geöffnet.

Dies stellt Systemadministratoren vor einige interessante Herausforderungen. Wenn mehrere Benutzer über VNC eine Verbindung zum Server herstellen, möchten Sie möglicherweise einen Weg finden, um ihre VNC-Dienste zu beenden, wenn sie nicht mehr benötigt werden. Dies kann einige wertvolle Systemressourcen einsparen.

Fehlerbehebung - VNC-Dienst stürzt ab

Beim Testen und Herumspielen mit VNC kann es vorkommen, dass der Dienst abgestürzt ist und nicht wiederhergestellt werden kann. Wenn Sie versuchen, den Status zu überprüfen:

sudo systemctl status vncserver@:4.service

Diese lange Fehlermeldung kann auftreten:

vncserver@:4.service - Remote desktop service (VNC)
  Loaded: loaded (/etc/systemd/system/vncserver@:4.service; enabled)
  Active:  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, schlägt fehl:

sudo systemctl start vncserver@:4.service

Fehlgeschlagener Start:

. See 'systemctl status vncserver@:4.service' and 'journalctl -xn' for details.

Normalerweise ist der Grund einfach genug. Überprüfen Sie "+ / var / log / messages":

sudo tail  /var/log/messages

Der zugehörige Fehler sieht folgendermaßen aus:

Nov  7 00:08:36 localhost runuser: Warning: localhost.localdomain:4 is taken because of /tmp/.X11-unix/X4
Nov  7 00:08:36 localhost runuser: Remove this file if there is no X server localhost.localdomain:4
Nov  7 00:08:36 localhost runuser: A VNC server is already running as :4
Nov  7 00:08:36 localhost systemd: vncserver@:4.service: control process exited, code=exited status=2
Nov  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

Abhilfe schafft das Löschen der Datei unter Ordner:

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

Obwohl relativ selten, können bei der Arbeit mit VNC andere Fehler auftreten. Beispielsweise kann der Bildschirm Ihres Remote-Desktops leer werden oder hängen bleiben, die Sitzung kann mit einer kryptischen Fehlermeldung abstürzen, VNC Viewer kann möglicherweise keine ordnungsgemäße Verbindung herstellen oder Befehle zum Starten von Anwendungen an die GUI senden usw.

Wir empfehlen, die Datei "+ / var / log / messages" zu überprüfen, um ein besseres Verständnis zu erhalten. Manchmal müssen Sie möglicherweise Ihren Server neu starten oder in extremen Fällen den VNC-Dienst neu erstellen.

Systemressourcen können auch ein Schuldiger sein. Möglicherweise müssen Sie Ihrem Droplet zusätzlichen Arbeitsspeicher hinzufügen.

Schritt 8 - Sichern von VNC-Sitzungen durch SSH-Tunnelung

Bisher 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 beim Verbindungsaufbau davor. Zu Beginn der Sitzung wird nur das Kennwort verschlüsselt. Jeder nachfolgende Netzwerkverkehr und Datentransfer kann von jedermann in der Mitte abgefangen werden.

  • Über SSH Tunneling *

Hier können Secure Shell (SSH) -Sitzungen Abhilfe schaffen. Mit SSH kann VNC im Rahmen einer SSH-verschlüsselten Sitzung ausgeführt werden. Dies ist als Tunnelbau bekannt. Tatsächlich wird der VNC-Datenverkehr über das SSH-Protokoll übertragen, wodurch die gesamte Kommunikation mit dem Server verschlüsselt wird. Es wird tunnelling genannt, weil SSH einen Rundumschutz für VNC bietet und VNC wie in einem Tunnel innerhalb von SSH ausgeführt wird. SSH-Tunnel können auch für andere Protokolle wie POP, X oder IMAP verwendet werden.

SSH-Tunneling funktioniert mit der Portweiterleitung, bei der der Zugriff von einem bestimmten Port auf einen anderen Port auf einem anderen Computer übersetzt wird. Bei der Portweiterleitung wird eine Clientanwendung, wenn sie eine Verbindung zu Port A auf Computer A herstellt, transparent an Port B weitergeleitet, der auf Computer B ausgeführt wird. Die Client-Anwendung hat keine Kenntnis von dieser Übersetzung und denkt, dass eine Verbindung zum ursprünglichen Port hergestellt wird. Die Portweiterleitung ist eine der Funktionen des SSH-Protokolls.

Ausführlichere Informationen zum SSH-Tunneln finden Sie unter dieses Lernprogramm.

In diesem Tutorial haben wir VNC so konfiguriert, dass es auf den Ports (für * joevnc *) und (für * janevnc *) ausgeführt wird.

Mit der Portweiterleitung können wir unseren lokalen VNC-Client so einstellen, dass er eine Verbindung zu Port * 5900 * auf dem lokalen Client-Computer herstellt. Dies kann Port * 5905 * auf dem Remote-Server zugeordnet werden. Dies ist ein Beispiel für die * janevnc * -Verbindung, aber Sie können die gleichen Schritte auch für andere Clients ausführen.

Wenn die VNC-Clientanwendung gestartet wird, kann auf Port * 5900 * auf * localhost * verwiesen werden, und unsere Portweiterleitung transportiert sie transparent zu Port * 5905 * auf dem Remoteserver.

  • Hinweis: * Sie müssen jedes Mal * einen SSH-Abschnitt starten, um die Verbindung zu sichern.

  • OS X *

Öffnen Sie auf Ihrem Mac * Terminal *.

Geben Sie die folgenden Verbindungsinformationen ein und achten Sie darauf, "++" durch die IP-Adresse Ihres Remote-Servers zu ersetzen:

ssh -L 5900::5905 janevnc@ -N

Geben Sie das UNIX-Passwort von * janevnc * ein. Die Verbindung scheint zu hängen. Sie können es so lange ausführen, wie Sie den Remotedesktop verwenden.

Fahren Sie nun mit den Anweisungen für VNC Viewer fort.

  • Windows *

Für die Sicherung der VNC-Sitzung von * janevnc * wird davon ausgegangen, dass auf dem lokalen Windows-Computer PuTTY installiert ist. PuTTY ist kostenlos und kann unter here heruntergeladen werden.

Wenn die VNC- und Terminalsitzungen von * janevnc * noch nicht geschlossen sind, schließen Sie sie jetzt.

Starten Sie PuTTY. Stellen Sie im Sitzungsbildschirm sicher, dass Sie die Server-IP-Adresse angeben und der Verbindung einen beschreibenden Namen geben. Klicken Sie dann auf die Schaltfläche * Speichern *, um die Verbindungsdetails zu speichern. Beachten Sie, wie wir im Feld * Hostname * "+ @ +" angegeben haben:

image: https: //assets.digitalocean.com/articles/Install_VNC_Gnome/10.jpg [Sitzungsdetails in der PuTTY-Konfiguration]

Erweitern Sie als Nächstes den Menüeintrag * SSH * im linken Navigationsbereich und wählen Sie den Eintrag * X11 * aus. Hier 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-Datenverkehr zwischen Server und Client verschlüsselt:

image: https://assets.digitalocean.com/articles/Install_VNC_Gnome/11.jpg [X11-Weiterleitung in PuTTY-Konfiguration]

Schließlich wählen Sie * SSH> Tunnel *. Geben Sie "+ 5900 " in das Feld "Quelle" ein. Geben Sie im Feld * Ziel * den Namen oder die IP-Adresse Ihres Servers an, gefolgt von einem Doppelpunkt und der VNC-Portnummer für den gewünschten Benutzer. In unserem Fall haben wir ": 5905 +" angegeben.

Alternativ können Sie auch Port * 5902 * verwenden. * 2 * ist in diesem Fall die Anzeigenummer für * janevnc * (denken Sie an die Meldung, die angezeigt wurde, als * janevnc * den Befehl + vncserver + ausführte).

Klicken Sie auf die Schaltfläche * Hinzufügen * und das Mapping 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 an den Port * 5905 * des Remote-Servers getunnelt.

image: https: //assets.digitalocean.com/articles/Install_VNC_Gnome/12.jpg [SSH-Tunneling in PuTTY-Konfiguration]

Gehen Sie zurück zu den * Sessions * -Elementen und speichern Sie die Sitzung für * janevnc *. Klicken Sie auf die Schaltfläche * Öffnen *, um eine neue Terminalsitzung für * janevnc * zu öffnen. Melden Sie sich als * janevnc * mit dem entsprechenden UNIX-Passwort an:

image: https://assets.digitalocean.com/articles/Install_VNC_Gnome/13.jpg [SSH-Terminalsitzung für janevnc]

  • VNC Viewer *

Starten Sie anschließend den VNC Viewer erneut. Geben Sie diesmal in die Adresse * VNC Server * <^> ein und lassen Sie den VNC-Server die Verschlüsselungsmethode auswählen:

image: https://assets.digitalocean.com/articles/Install_VNC_Gnome/14.jpg [Verbinden von VNC Viewer mit Localhost mit Portweiterleitung]

Klicken Sie auf die Schaltfläche * Verbinden *.

Sie erhalten weiterhin das Dialogfeld, in dem Sie über eine unverschlüsselte Sitzung gewarnt werden. Diesmal können Sie sie jedoch ignorieren. VNC Viewer weiß nicht, an welchen Port er weitergeleitet wird (dies wurde in der gerade gestarteten SSH-Sitzung festgelegt) und geht davon aus, dass Sie versuchen, eine Verbindung zum lokalen Computer herzustellen.

Wenn Sie diese Warnung akzeptieren, wird die bekannte Passwortabfrage angezeigt. Geben Sie das VNC-Kennwort von * janevnc * ein, um auf den Remotedesktop zuzugreifen.

Woher wissen Sie, dass die Sitzung verschlüsselt wurde? Wenn Sie darüber nachdenken, haben wir in der SSH-Sitzung die Portweiterleitung festgelegt. Wenn keine SSH-Sitzung eingerichtet worden wäre, hätte die Portweiterleitung nicht funktioniert. Wenn Sie das Terminalfenster schließen und sich von der PuTTY-Sitzung abmelden und dann versuchen, eine Verbindung nur mit VNC Viewer herzustellen, wird bei einem Verbindungsversuch zu "+ localhost: 5900 +" die folgende Fehlermeldung angezeigt:

image: https: //assets.digitalocean.com/articles/Install_VNC_Gnome/15.jpg [VNC Viewer-Fehlermeldung]

Wenn also die Verbindung + localhost: 5900 + funktioniert, können Sie sicher sein, dass die Verbindung verschlüsselt ist.

Denken Sie daran, dass Sie bei jeder Verwendung von VNC zuerst die SSH-Verbindung herstellen möchten, um sicherzustellen, dass Ihre Verbindung immer verschlüsselt ist.

Fazit

Der Zugriff auf Ihr CentOS Linux-System über ein GUI-Frontend kann die Systemadministration erheblich vereinfachen. Sie können von jedem Client-Betriebssystem aus eine Verbindung herstellen und müssen nicht auf webbasierte Hosting-Kontrollfelder angewiesen sein. VNC hat eine viel geringere Stellfläche als die meisten Bedienfelder.

Obwohl wir gezeigt haben, wie zwei normale Benutzer eine Verbindung zu ihren VNC-Clients herstellen können, ist dies in seriösen Produktionsumgebungen kaum praktikabel. In der Realität verfügen Benutzer über angepasste Anwendungen oder Browser für den Zugriff auf den Server. Das Ausführen einer Reihe von VNC-Diensten für jeden Benutzer führt außerdem zu einer unnötigen Belastung der Systemressourcen, ganz zu schweigen von den damit verbundenen Risiken.

Wenn Sie VNC auf Ihrem Produktions-Linux-Server installieren und ausführen möchten, wird dringend empfohlen, es nur für administrative Zwecke zu verwenden.