VNC-Verbindung durch SSH tunneln und absichern
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.
YubiKey Themenseite
Hier geht es zur 👉 YubiKey Themenseite, dort findest du noch mehr Beiträge rund um den YubiKey.
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.
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.
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.
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.
Follow Me❗️
Source
Photo by Hugues de BUYER-MIMEURE on Unsplash