Skip to content

Hilfe leisten mit Reverse VNC

In der heutigen Zeit sind Linux-Distributionen oft so weit, dass sie auch ein Standardanwender ohne große Schwierigkeiten installieren kann. Dennoch gibt es im laufenden Betrieb immer wieder mal Probleme, wo nur ein „Linux-Crack“ helfen kann. Schlecht, wenn der mehrere hundert Kilometer entfernt wohnt. Gut, wenn es eine Software gibt, die dabei hilft, über diese Entfernung dennoch Unterstützung zu leisten: VNC.

Hintergrund

Der Anwendungsfall ist leicht beschrieben: Fast jeder, der länger mit Linux zu tun hat, kommt früher oder später dazu, bei Freunden oder Verwandten Linux auf deren Rechner aufzuspielen. Sei es, weil die eigene Überredungskunst so groß ist oder weil die PC-Besitzer wieder einmal über das aktuell installierte Betriebssystem fluchen. Das Resultat hiervon sind meist nächtliche Anrufe, weil das E-Mailprogramm mal wieder den Dienst versagt oder der Benutzer mit GIMP zur Bildbearbeitung überfordert ist.

Wohnt man vor Ort, kann man schnell vorbei schauen und sich dem Problem annehmen. Wohnt man aber weit entfernt, bleibt fast nur der telefonische Support. Das hat zur Folge, dass die Problembeschreibung eher vage ist (vor allem, wenn die Benutzer kein Englisch können und versuchen, englische Fehlermeldungen vorzulesen) und umgekehrt muss man grob aus dem Kopf wissen, wo der Hilfesuchende hinklicken oder was er eintippen muss, um alles wieder zum Laufen zu bewegen.

Die Lösung: VNC

Die Lösung für obiges Problem nennt sich Virtual Network Computing (kurz VNC). Hierüber ist es möglich, den Bildschirminhalt eines entfernten Rechners (z.B. über das Internet) anzuzeigen und dessen Maus- und Tastatureingaben zu steuern.

Der Artikel legt dabei Wert auf zwei Dinge: Einfachheit und Sicherheit!

Das Thema „Einfachheit“ ist vor allem bei neuen Linux-Nutzern bzw. nicht ganz so erfahrenen Computern-Benutzern wichtig. Man kann nicht erwarten, dass diese erst ein Terminal öffnen, um etwas einzugeben. Alles muss am besten per Doppelklick funktionieren.

Das Thema „Sicherheit“ ist wichtig, weil man schließlich den kompletten Bildschirminhalt über das Internet überträgt. Werden hier Passworte oder auch nur Login-Daten eingegeben, sollten dies besser nicht von außen eingesehen werden können.

Zusätzlich gab es beim realen Anwendungsfall das Problem, dass man von außen nicht auf den PC des Hilfesuchenden zugreifen konnte, da der Internet-Provider durch einen Proxy den Direktzugriff unterbunden hatte. Es musste also eine Möglichkeit geschaffen werden, dass der Hilfesuchende sich zum Helfer verbindet und nicht umgekehrt, wie man es normalerweise umsetzen würde. Dies nennt sich dann Reverse-VNC.

Vorbereitungen auf der Helfer-Seite

Die Vorbereitungen stützen sich zum Teil auf den VNC-Artikel im ubuntuusers-Wiki.

Die meiste Arbeit muss der Helfer auf sich nehmen, sodass der Hilfesuchende nur extrem wenig zu tun hat.

Neues Nutzerkonto einrichten

Damit der Hilfesuchende sich überhaupt zum Helfer-PC verbinden kann, wird ein neues Benutzerkonto benötigt, welches man einfach mittels

# adduser hilfesuchender

anlegen kann. Den Benutzernamen hilfesuchender kann man dabei natürlich nach den eigenen Wünschen oder nach dem Log-in des Hilfesuchenden anpassen (was oft am praktischsten ist).

Der Benutzer muss nicht Mitglied besonderer Gruppen sein, so kann er auch selbst wenig Unsinn anstellen. ;)

SSH-Server installieren

Für eine sichere Verbindung sollte man SSH (Secure Shell) nutzen. Hierfür muss auf dem Helfer-PC ein SSH-Server laufen, den man über das Paket openssh-server installieren kann. Eine spezielle Einrichtung ist nicht erforderlich.

Port-Forwarding einrichten (optional)

Wer hinter einem Router sitzt (was heute schon fast Standard ist), muss noch dafür sorgen, dass der SSH-Port 22 korrekt an den eigenen Rechner hinter dem Router weitergeleitet wird. Ansonsten ist keine SSH-Verbindung von außen möglich.

Portweiterleitung in der FRITZ!Box.

Portweiterleitung in der FRITZ!Box.

Die Einrichtung unterscheidet sich je nach Router. Bei einer FRITZ!Box findet man die Portweiterleitung in der Regel unter „Internet -> Freigaben“. Als Einstellung wählt man, dass der eingehende Port 22 per TCP-Protokoll an den Port 22 des Helfer-PCs weitergeleitet wird. Hierfür muss man die IP-Adresse des Helfer-PCs eingeben, die man im Terminal mittels

$ ifconfig
eth0 Link encap:Ethernet Hardware Adresse 00:00:00:00:00:00
inet Adresse:192.168.178.2 Bcast:192.168.178.255 Maske:255.255.255.0

herausbekommt. Die eigene Netzwerkkarte hat normalerweise die Kennung eth0. Bei einer WLAN-Verbindung wäre es wlan0. Die Adresse hinter inet Adresse ist die IP, die man im Router zur Weiterleitung angeben muss.

DynDNS-Konto erstellen (optional, aber sinnvoll)

DynDNS ist ein Internet-Dienst, der kostenlos anbietet, Webadressen auf bestimmte IP-Adresse zu leiten. DNS steht dabei für Domain Name System und dient der Namensauflösung solcher Adressen. Ruft man beispielsweise Heise über http://www.heise.de/ im Browser auf, könnte man auch einfach die Zahlenkolonne/IP-Adresse http://193.99.144.85/ aufrufen. Da sich diese Zahlen aber kaum jemand merken kann und sie sich vor allem auch ständig ändern, nutzt man eben nur den Namen www.heise.de, der dann auf die
richtige IP-Adresse geleitet wird.

Bei DynDNS konnte man sich früher ein kostenloses Konto einrichten und dort z.B. die Adresse helfer.dyndns.org registrieren. Das helfer sollte man aber besser etwas eindeutiger wählen. Da dies scheinbar heute nicht mehr möglich ist, gibt es die Alternativen No-IP und FreeDNS. Beide Dienste habe ich aber nicht getestet, da ich ein DynDNS-Konto besitze.

Ein eingerichtetes DynDNS-Konto.

Ein eingerichtetes DynDNS-Konto.

Über die Einstellungen auf der Webseite kann man dann immer, wenn man es benötigt, seine aktuelle IP-Adresse eintragen. Diese ändert sich nämlich normalerweise mit jeder Einwahl ins Internet. Dank der Zwangstrennung der Provider also täglich. (Ausnahmen sind Internet-Provider, die jedem Kunden eine feste IP-Adresse zuweisen.) Die eigene IP-Adresse bzw. genau genommen die IP, über die der eigene Router erreichbar ist, bekommt man entweder über die Webseite checkip.dyndns.org oder im Terminal:

$ curl -s checkip.dyndns.org | grep -Eo '[0-9\.]+'

Etwas komfortabler geht es mit manchen Routern, bei denen man Dynamic DNS fest einstellen kann. Der Router meldet sich dann bei jeder IP-Änderung am jeweiligen Portal (als z.B. DynDNS) an und speichert dort die IP-Adresse. Somit ist man immer aktuell erreichbar. In der FRITZ!Box findet man die Einstellung hierfür unter „Internet -> Freigaben -> Dynamic DNS“.

Die DynDNS-Einstellungen in der FRITZ!Box.

Die DynDNS-Einstellungen in der FRITZ!Box.

Sicherheitshinweis: Durch die automatische Übertragung der IP-Adresse ist der eigenen Rechner also immer über den eingetragenen Namen erreichbar. In der Regel ist es genau das, was man will, aber man sollte hier schon sehr sicher sein, dass der eigene Rechner/Router abgesichert ist, da bei einer (versehentlichen) Veröffentlichung des Namens ggf. Angriffe auf den Rechner/Router geführt werden. Das heißt, es sollten keine unnötigen Ports weitergeleitet werden und keine unnötigen Dienste auf dem Rechner laufen.

VNC-Viewer installieren

Die Installation des VNC-Viewer ist der einfachste Punkt dieser Anleitung. Man muss nur das Paket xvnc4viewer installieren.

Vorbereitungen auf der Seite des Hilfesuchenden

Damit der Hilfesuchende später bei einem Problem wenig tun muss, muss der Helfer nur drei Dinge einrichten, die eine einfache und sichere Verbindung ermöglichen.

SSH-Schlüssel erstellen und kopieren

Damit der Hilfesuchende möglichst automatisch ohne Passworteingabe eine sichere Verbindung zum Helfer-PC aufbauen kann, nutzt man einen sogenannten SSH-Schlüssel. Dieser besteht aus einer langen Zeichenkombination und sorgt für eine eindeutige Identifizierung einer Person.

Auf dem Rechner des Hilfesuchenden erzeugt man sich am besten ein SSH-Schlüsselpaar, falls man nicht eh schon eines hat:

$ ssh-keygen -t rsa

Bei der Frage nach einem Passwort gibt man nichts ein und drückt nur [Enter]. Die Datei ~/.ssh/id_rsa.pub enthält dann den Schlüssel, den man auf den Helfer-PC übertragen muss.

Man speichert den Inhalt der Datei dort in eine neue Textdatei /home/hilfesuchender/.ssh/authorized_keys. Wenn man den Benutzer hilfesuchender weiter oben anders genannt hat, muss man dies natürlich anpassen.

Im Wiki von ubuntuusers.de wird noch empfehlen, den Zugriff des Benutzers einzuschränken. Dies kann man tun, wenn man noch mehr Wert auf Sicherheit legt.

VNC-Programm installieren

Dieser Punkt ist wieder einfach, denn es muss nur das Paket x11vnc installiert werden.

Verbindung herstellen

Bevor man gleich mit VNC loslegt, sollte man überhaupt die Verbindung prüfen. Auf dem Rechner des Hilfesuchenden kann man sich per SSH beim Helfer-PC einloggen:

$ ssh hilfesuchender@helfer.dyndns.org

Sollte man DynDNS nicht eingerichtet haben, kann man auch nur die IP-Adresse nutzen, die man wie oben beschrieben über checkip.dyndns.org herausbekommt:

$ ssh hilfesuchender@212.255.231.242

Sollte hier nach einem Passwort gefragt werden, sollte man den SSH-Schlüssel in der der Datei /home/hilfesuchender/.ssh/authorized_keys auf dem Helfer-PC überprüfen. Ist der Login nicht erlaubt, wurde der Benutzer hilfesuchender vielleicht nicht richtig angelegt.

Ist bei der Verwendung von DynDNS keine Verbindung möglich, sollte man erst einmal prüfen, ob die IP-Adresse stimmt:

$ ping helfer.dyndns.org

Reverse-VNC-Verbindung aufbauen

Auf dem Helfer-PC muss man den VNC-Viewer starten:

$ vncviewer -listen

Damit lauscht der VNC-Viewer auf eingehende Verbindungen.

Ping des Helfer-PCs und Start des VNC-Viewers.

Ping des Helfer-PCs und Start des VNC-Viewers.

Auf der Seite des Hilfesuchenden verbindet man sich per SSH auf den Helfer-PC und startet dann x11vnc, um eine Verbindung herzustellen:

$ ssh -f -L 5500:localhost:5500 hilfesuchender@helfer.dyndns.org sleep 10; x11vnc -connect_or_exit localhost:5500

Der Port 5500 ist der Standardport, über den VNC normalerweise kommuniziert und der über die Option -L lokal weitergeleitet wird, sodass der Helfer-PC sich dorthin verbinden kann. Die Option -f setzt SSH in den Hintergrund, ehe es die Kommandos danach ausführt. Die Wartezeit von 10 Sekunden ist dafür da, dass die Verbindung auch korrekt etabliert wurde, ehe VNC gestartet wird. Hinweis: x11vnc ist nicht mehr Teil des SSH-Kommandos und wird auf dem PC des Hilfesuchenden ausgeführt.

Wie oben auch, muss man helfer.dyndns.org durch die IP-Adresse ersetzen, wenn man kein DynDNS nutzt.

Jetzt sollte eigentlich auf dem Helfer-PC ein Fenster aufgehen, in dem man den Desktop des verbundenen Rechners sieht. Zusätzlich kann man auch Maus und Tastatur steuern.

Damit ist man am Ziel und kann bei einem Problem ziemlich leicht helfen.

Skript zum Ausführen

Damit der Hilfesuchende nicht auf der Konsole die Verbindung aufbauen muss, kann man den Befehl auch in ein kleines Skript gießen, welches man auf dem Desktop verlinkt. Dies kann der Hilfesuchende dann einfach per Doppelklick ausführen. Wichtig dabei ist der Haken bei „Im Terminal ausführen“, damit man etwaige Fehlermeldungen mitbekommt.

#!/bin/sh
ssh -f -L 5500:localhost:5500 hilfesuchender@helfer.dyndns.org sleep 10; x11vnc -connect_or_exit localhost:5500
exit 0

Fazit

Der Artikel hat gezeigt, wie man ohne viel Einrichtung bei Linux-Problemen auf einem entfernten Rechner helfen kann. Der Benutzer muss dafür im Optimalfall nur ein Desktop-Icon doppelklicken, nachdem der Helfer einen Verbindungsaufbau erlaubt hat. Das Ganze geschieht dank SSH zusätzlich noch gesichert.

Es gibt noch andere VNC-Viewer (siehe Wikiartikel von ubuntuusers.de), aber man sollte am besten nie eine ungesicherte Verbindung ohne SSH benutzen, wenn es sich vermeiden lässt. Auch wenn man nichts zu verbergen hat, ist die ungesicherte Übertragung von persönlichen Daten und Passwörtern über das Internet ein sehr guter Weg, sein System zu kompromittieren. Und damit ist dem, der Hilfe sucht, im Endeffekt wenig gedient.

Trackbacks

deesaster.org am : Dynamic-DNS-Alternativen

Vorschau anzeigen
Da schreibt man gerade einmal etwas zur sinnvollen Benutzung von DynDNS und dann erhält man eine E-Mail von DynDNS, dass der freie Dienst weiter eingeschränkt wird. Am 14.05.2013 schrieb mir das Unternehmen, dass es für den freien Dienst nicht mehr reicht

Kommentare

Ansicht der Kommentare: Linear | Verschachtelt

katze_sonne am :

Schöner Artikel!

Allerdings sollten zwei (einfachere) Alternativen auch nicht außer Acht gelassen werden:
* Teamviewer
* Jitsi
Während der Teamviewer proprietär ist und somit vielleicht nicht jedem so gut passt, ist Jitsi OpenSource und man kann den Desktop per Jingle übertragen und sogar fernsteuern. Das funktioniert (meistens) auch schon ganz gut und muss vor allem nicht erst groß eingerichtet werden - einen Jabber Account haben die meisten durch web.de oder gmx.de sowieso schon (ob's mit Google Mail funktioniert weiß ich gerade nicht) :)

Dee am :

Also Teamviewer kommt offensichlichen Gründen nicht in Frage.

Wie ist bei Jitsi denn die Verschlüsselungstechnik? Läuft das per SSH? Und wie ist die Anwendung auf der Hilfesuchenden-Seite? Ich brauchte eine Lösung, die sicher und einfach ist.

Und meine Eltern (die als Beispiel für den Artikel herhalten mussten) haben keinen Jabber-Account. Wozu auch? Ich bin unsicher, ob Jitsi daher die richtige Lösung gewesen wäre.

katze_sonne am :

Ohh, ich sehe jetzt erst, dass das ja dein Blog ist, dee :D

Also den Teamviewer habe ich halt genannt, weil darauf halt viele Leute schwören (ich eingeschlossen) - es gibt halt nichts einfacheres... nunja, dafür aber die bekannten Nachteile.

Die Verschlüsselung bei Jitsi läuft nicht per SSH, sondern irgendwie anders - die haben glaube ich verschiedene Verschlüsselungsalgorithmen implementiert, genau sagen, wie und wo und was, kann ich's jetzt allerdings nicht. Ein Jabber-Account ist ja auch schnell erstellt, falls noch nicht vorhanden (web.de, gmx.de oder einer der zahlreichen anderen kostenlosen Jabber-Anbieter).

Die Anwendung auf der Hilfesuchenden-Seite ist ähnlich wie Skype, an manchen Stellen aber noch etwas unübersichtlich... Zur Einfachheit der Bedienung her würde ich das so ausdrücken: Meiner Oma würde ich das nicht zutrauen, meinen Eltern oder meiner Schwester aber schon, ohne Probleme. Wenn du mal sehen möchtest, wie das da abläuft, ich habe gerade mal auf youtube dieses Video dazu gefunden (inzwischen sieht die Oberfläche von Jitsi aber ein wenig anders aus, prinzipiell handelt es sich hierbei aber auch heute noch um die selbe Funktionsweise): https://www.youtube.com/watch?v=I_39qDwPKQM

Natürlich kann es gut sein, dass Reverse-VNC für deine Eltern die richtige Lösung war, aber vielleicht passt ja bei dem ein oder anderen Leser deines Blogs ein anderer Weg besser für seinen Anwendungsfall :)

Dee am :

Okay, gerade das Video angeschaut. Und nein, das wäre wohl nichts für meine Eltern. Ich könnte sie natürlich telefonisch immer anleiten, wie sie Jitsi starten und wo sie dann welchen Knopf drücken müssen. Aber es ist wirklich einfacher, jetzt einfach zu sagen: "Drück den Knopf auf dem Desktop. Ja, doppelt. Mit der linken Maustaste."

Aber Du hast natürlich auch Recht, dass anderer Szenarien ggf. andere Lösungen benötigen. Vor allem beim Thema Sicherheit sollte man aber nicht sparen.

Eddy am :

Erst kürzlich habe ich bei einem Windows Umsteiger welcher 400 Km von mir weg wohnt, LinuxMint neben bestehendem Windows 7 installiert.

Der Hilfesuchende hatte seinen Rechner zuvor mit der Mint Live DVD gebootet.
Mittels Pidgin xmpp habe ich dem Hilfesuchenden die Terminal Befehle zur Installation von Teamviever gegeben, welche er lediglich nur noch mit Copy and Paste in sein Terminal kopieren durfte.
Teamviever auf beiden Seiten gestartet, die Pins ausgetauscht und der Rest war dann nur noch ein Kinderspiel.
Wer Teamviever nutzt sollte wissen, das ein Server dazwischen sitzt. Und ehrlich gesagt ist mir dabei immer etwas mulmig, weil ich nicht weiß, was der Server dazwischen alles so mitloggt.

Dee am :

Nicht nur das, auch die Verbindung zwischen den beiden Rechner ist unverschlüsselt und könnte abgehört werden oder? Wäre zum Beispiel interessant, wie Tastendrücke übertragen werden, vor allem eben in Hinblick auf Passwörter, die der Helfer eingeben muss. (Meine Hilfesuchenden kennen Ihr Root-Passwort zum Beispiel nicht, damit Sie keinen Unsinn anstellen. ;))

Trolli Schmittlauch am :

Über normale ADSL Verbindungen ist VNC in der von Dir angegebenen unkomprimierten Fassung einfach zu langsam (bei mir wurden die Frames unkomprimiert verschickt)
Deshalb benutze ich die tight Komprimierung, die ist schnell genugvncviewer -listen -compresslevel 8 -quality 4 -encodings "tight hextile" -nocursorshape -x11cursor

Dee am :

Danke für den Tipp. Werde ich demnächst mal testen. Bei mir ist die Übertragung vor allem bei grafikintensiven Sachen (Bilder etc.) auch sehr langsam.

Kommentar schreiben

Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Formular-Optionen