Zum Inhalt

VNC-Verbindung durch SSH tunneln und absichern

Photo by Hugues de BUYER-MIMEURE on Unsplash

Die erste Wahl für den Fernzugriff auf einen Linux-Server ist sicherlich SSH. Möchte man aber dabei eine komplette Desktop-Umgebung nutzen, dann eignet sich VNC (=Virtual Network Computing).

Da die VNC-Verbindung nicht wirklich sicher ist und nur mit einem schwachen Passwort abgesichert werden kann, sollte man SSH und VNC kombinieren.

In den Manuals kannst du die Passwortzusammensetzung nachlesen:

"Each password has to be longer than five characters (unless the -f command-line option was used, see its description below). Only the first eight characters are significant. If the primary password is too short, the program will abort."

Eine Passwortlänge von 8 Zeichen ist eher suboptimal und sollte deshalb durch weitere Sicherheitsmechanismen wie SSH ergänzt werden, auch im eigenen Netzwerk.

Anstatt also direkt mit einem VNC-Client auf den Linux-Server zuzugreifen, wird zuerst eine SSH-Verbindung aufgebaut und VNC anschließend durch diese getunnelt.

Die SSH-Verbindung lässt sich dabei sehr gut mit einem Hardwaretoken, wie dem YubiKey, absichern.

Linux-Server

Desktop-Umgebung xfce installieren

Es wird die Desktop-Umgebung xfce4 auf dem Linux-Server installiert. xfce4 wird dann exklusiv für die VNC-Verbindung verwendet.

Wenn ein Monitor am Server angeschlossen wird, kann weiterhin die gewohnte Gnome-Umgebung verwendet werden.

(Bei dem Versuch Gnome per VNC zu nutzen, habe ich nur einen grauen Bildschirm und den Mauszeiger übertragen bekommen.)

Die neue Desktop-Umgebung lässt sich aus den Paketquellen installieren.

sudo apt install xfce4 xfce4-goodies

VNC-Server installieren

Als VNC-Server wird tightvnc verwendet.

sudo apt install tightvncserver

Das Passwort für den Zugriff via VNC wird mit vncpasswd gesetzt und auch geändert.

Gestartet wird der VNC-Server dann ganze einfach mit

vncserver

Eine VNC-Verbindung lässt sich nun schon herstellen. Aber die läuft noch nicht und xfce4 wird auch noch nicht verwendet und auch kein SSH-Tunnel.

VNC-Server konfigurieren

Es wird der VNC-Server für Display 1 beendet.

vncserver -kill :1

Die bestehende Konfiguration wird gesichert, falls vorhanden.

mv ~/.vnc/xstartup ~/.vnc/xstartup.bak
nano ~/.vnc/xstartup

Der Inhalt der Datei xstartup ist der Absatz einzufügen, damit xfce4 für die VNC-Verbindung verwendet wird und nicht Gnome. (grauer Bildschirm!)

xrdb $HOME/.Xresources

startxfce4 &

Die Datei ausführbar zu machen. (x= execute)

chmod +x ~/.vnc/xstartup

Nun kann der VNC-Server auf dem Linux-Server gestartet werden.

tightvncserver -localhost

Durch den Zusatz -localhost wird VNC ausschließlich auf den Linux-Server beschränkt und andere Verbindungen werde nicht zugelassen.

Versucht ein Client direkt eine VNC-Verbindung herzustellen, ist die nicht erlaubt.

Durch das Beschränken von VNC ausschließlich auf den Server und das Tunneln durch die SSH-Verbindung ist der direkte Aufruf im VNC-Client über eine ungeschützte Leitung nicht mehr notwendig:

192.168.2.13:1

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

sshd_conf anpassen

In der zentralen Datei zu Regelung der SSH-Verbindung ist ein Eintrag zu setzen, um das Port Forwarding zu erlauben.

Die Datei sshd_config ist zu editieren.

sudo nano /etc/ssh/sshd_config

Am Ende der Datei ist die Zeile einzutragen.

GatewayPorts yes

AllowTcpForwarding yes

Danach ist der SSH-Dienst neu zu starten, um die Änderungen einzulesen.

sudo systemctl restart sshd

Client

SSH-Verbindung herstellen

Die SSH-Verbindung wird auf dem Client mit hergestellt:

ssh -L 5901:localhost:5901 benutzername@192.168.2.13

Mit der Option -L wird die VNC-Verbindung localhost:5901 automatisch durch die SSH-Verbindung zum Linux-Server getunnelt.

Für eine ausführliche Beschreibung siehe man ssh.

VNC-Verbindung

Nachdem die SSH-Verbindung zwischen Client und Server aufgebaut wurde, kann mit jedem VNC-Client die Verbindung zum Server hergestellt werden.

Dazu gibt man im Client einfach ein:

localhost:5901

Durch die verwendete Option ssh -L werden Anfragen an localhost:5901 automatisch an den Linux-Server weitergeleitet.
Dort lauscht auf Port der VNC-Server, der wiederum die Verbindung nach Eingabe des VNC-Passworts erlaubt.

VNC-Client

Nicht vergessen, auf dem Linux-Server den VNC-Server zu starten.

tightvncserver -localhost

Die Auflösung lässt sich beim Starten gleich individuell anpassen. Dazu wird einfach der Befehl um eine weitere Option erweitert.

tightvncserver -localhost -geometry 1600x1200

Ruft man die VNC-Sitzung auf dem Client auf, wird das Fenster automatisch auf die angegebenen Auflösung skaliert.

VNC-Client

Note

Artikel überarbeitet: November 2023

Gib mir gerne einen Kaffee ☕ aus ❗️

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕️ ausgeben.

Donation via PayPalDonation via LiberaPay

Donation via Bitcoin
Bitcoin Address: bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj

Source

Photo by Hugues de BUYER-MIMEURE on Unsplash