Blog

VNC über einen SSH-Tunnel

No comments

So ziemlich jeder Systemadministrator kennt VNC (Virtuel Network Computing). Über VNC lassen sich entfernte Rechner über das Netzwerk oder das Internet fernadministrieren. Dabei wird die laufende Desktopsitzung des zu administrierenden Rechners über das Netz an den Systemadministrator übermittelt. Grundvoraussetzung dabei ist natürlich ein sogenannter VNC-Server, der die Verbindung zur Verfügung stellt und ein sogenannter VNC-Client, der die Verbindung zum Server aufbaut. Der VNC-Server läuft dabei auf dem Rechner, der zu administrieren ist.

Am häufigsten wird VNC sicherlich in großen Netzwerken verwendet. Das erspart einem Systemadminstrator unter Umständen viel Zeit. VNC ist dabei für viele Betriebssysteme erhältlich und erfreut sich einer zunehmenden Beliebtheit.

Innerhalb eines gesicherten Netzwerkes ist die Nutzung von VNC auch „unbedenklich“. Was aber, wenn ein Rechner außerhalb eines gesicherten Netzwerkes administriert werden muss? Da die Datenübertragung einer VNC-Session unverschlüsselt erfolgt, stellt sich die Frage, wie z.B. über das Internet eine VNC-Session abzusichern ist?

Diese Fragestellungen gilt es im Folgenden zu klären.

Zielsetzung

Mit Mac OS X oder Linux eine VNC-Session zu einem über das Internet erreichbaren Linuxhost durch einen SSH-Tunnel

SSH (Secure Shell)

Was SSH genau ist und wie SSH funktioniert, möchte ich hier nicht weiter erläutern, sondern verweise gerne auf Wikipedia. Nur so viel: Daten, die über SSH transportiert werden, sind verschlüsselt und können nicht ohne Weiteres ausgelesen werden.

Administratoren nutzen SSH, um sich z.B. auf entfernten Rechnern sicher anzumelden. Die Kommunikation findet dann aber zumeist auf Kommandozeilenebene statt.

VNC-Server

Der VNC-Server auf einem Linuxhost ist relativ einfach zu bedienen. Fast jede Linux Distribution hat standardmäßig einen VNC-Server dabei. Falls nicht, ist es aber meist nicht schwer, den VNC-Server zu installieren. Ist der VNC-Server installiert, reicht ein einfacher Befehl „vncserver“ auf der Kommandozeile, um den VNC-Server zu starten. Ich bevorzuge jedoch folgenden Befehl:

  • vncserver -geometry 1280×1024

Damit erhalte ich die Auflösung von 1280×1024 Bildpunkten bei der VNC-Session.

Auf meinem Testsystem quittiert mir der VNC-Server nach dem Starten also die neue Desktop-Session wie folgt:

  • New ‚X‘ desktop is meintesthost:1

Die „1“ hinter dem Hostnamen zeigt, dass hier die erste Desktop-Session initialisiert wurde. Jede weitere würde die Zahl je um eins erhöhen (nur so als Randinfo…).

Aufbau des SSH-Tunnels

Der Aufbau einer SSH-Verbindung zu einem entfernten Linuxhost ist einfach. Hier gibt es SSH-Clients oder man bedient sich ganz einfach „old school“ der Konsole. Ich mache es kurz und schmerzlos – den SSH-Tunnel initialisiert man mit folgendem Befehl:

  • ssh -N -L 5900:localhost:5901 user@linuxhost.de

Dabei wird definiert, welcher lokale VNC-Port zum externen VNC-Port weitergeleitet wird. Wird der Tunnel über die Konsole „gegraben“, so bleibt das Termial bzw. die Konsole für die Dauer der VNC-Session blockiert.

VNC-Session

Um nun die VNC-Session vom entfernten Host über den SSH-Tunnel zu bekommen, muss lediglich per VNC-Client eine Verbindung zum Tunnel aufgebaut werden, nicht jedoch zum entfernten Host. Ein herkömmlicher freier VNC-Viewer als Client ist vollkommen ausreichend, um die Verbindung herzustellen.

Dabei ist lediglich darauf zu achten, dass als VNC-Server nicht der entfernte Host anzugeben ist, sondern der eigene Rechner, also in der Regel „localhost“. Jetzt noch den richtigen Port angeben und schon steht die VNC-Session über dem SSH-Tunnel.

Das sollte dann so aussehen: localhost:5900

Artikelupdate ->Windows

Ich habe heute einen interessanten HowTo gefunden, welcher das Gleiche für Windows-Nutzer beschreibt.

JerretVNC über einen SSH-Tunnel

Related Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.