Dieser Artikel ist größtenteils für alle Ubuntu-Versionen gültig.
Virtual Network Computing (kurz VNC) ist eine Software, die den Bildschirminhalt eines entfernten Rechners (auf dem ein VNC-Server läuft) auf einem lokalen Rechner (auf dem ein VNC-Viewer läuft) anzeigt und im Gegenzug Tastatur- und Mausbewegungen des lokalen Rechners an den entfernten Rechner sendet. Damit kann man auf einem entfernten Rechner arbeiten, als säße man direkt davor. Unter Windows ist diese Funktion als Remotedesktop bekannt und ist besonders hilfreich, um einem Bekannten bei seinen Rechnerproblemen zu helfen, ohne vor Ort sein zu müssen. Es werden auch z.B. viele Dienstleistungen im IT-Bereich über das VNC-Protokoll ausgeführt.
Die großen Desktopumgebungen KDE und GNOME bringen komfortable Werkzeuge mit, um den eigenen Desktop über VNC freizugeben oder auf einen anderen Rechner zuzugreifen. Diese lassen sich einfach über eine grafische Benutzeroberfläche bedienen. Alternativ kann man aber auch einen eigenen VNC-Server installieren oder von der Konsole einen VNC-Viewer starten.
Alternativen sind das kommerzielle NX und FreeNX.
In puncto Sicherheit ist zu beachten, dass VNC vor allem für den Einsatz in einem internen Netzwerk konzipiert ist: Von Haus aus wird die Verbindung zwischen Server und Client nicht verschlüsselt. Spätestens wenn über VNC auch administrative Tätigkeiten durchgeführt werden, ist eine ungesicherte VNC-Verbindung über das Internet ein großes Risiko: Ein Angreifer könnte beispielsweise an das unverschlüsselt übertragene Administratorpasswort gelangen. Deswegen soll in diesem Artikel auch die Möglichkeit einer verschlüsselten Verbindung angesprochen werden.
Dies ist der Rechner, auf dessen Desktop zugegriffen werden soll.
Der VNC-Server lauscht auf TCP-Port 590x - wobei x für die Nummer des Displays steht. Dies ist in der Regel 0. Falls der Server-Rechner hinter einer Firewall (z.B. ein Hardware-Router) steht, muss der entsprechende TCP-Port (also z.B. 5900) weitergeleitet werden.
GNOME bringt einen eigenen VNC-Server namens Vino mit. Dieser ist bei der Installation von Ubuntu/GNOME schon dabei, kann aber auch über das Paket
vino
mit apturl
Paketliste zum Kopieren:
sudo apt-get install vino
sudo aptitude install vino
nachinstalliert [1] werden. Die Konfiguration und das Starten des Servers erfolgt durch das Programm vino-preferences über
"System -> Einstellungen -> Entfernter Bildschirm"
in Ubuntu 11.10 findet man die Einstellungen über:
"Dash -> Freigabe der Arbeitsfläche"
Wenn unter
"System -> Einstellungen -> Startprogramme"
"Entfernter Desktop" nicht aktiviert ist, wird der Vino-Server nicht gestartet. Den Server kann man auch manuell über das Terminal mit
/usr/lib/vino/vino-server
starten.
Beim Xfce kann man den Vino-Server über
"Einstellungen -> Einstellungen -> Sitzung und Startverhalten -> Automatisch gestartete Anwendungen -> hinzufügen"
zu den Startprogrammen hinzufügen.
Unter dem Punkt "Sicherheit" sollte mindestens eine der beiden Sicherheits-Optionen aktiviert sein.
Von Ubuntu "Hardy Heron" 8.04 bis "Lucid Lynx" gibt es den Reiter "Fortgeschritten". Hier lassen sich weitere Einstellungen vornehmen. So kann man beispielsweise den Port, an dem der VNC-Server lauschen soll, ändern.
Ab Ubuntu "Lucid Lynx" 10.04 steht die Funktion "[ ] Netzwerkeinstellungen so ändern, dass Verbindungen akzeptiert werden" zur Verfügung. Falls man eine vertrauensvolle Person gebeten hat, einem per VNC (Remotedesktop) bei einem PC-Problem zu helfen, so kann man hiermit Ubuntu anweisen, automatisch die für VNC benötigte Portweiterleitung per UPNP im Router einzurichten.
Bei einigen Grafikkartentreibern, z.B. proprietäre von Nvidia und ATI, treten im Zusammenhang mit Vino und eingeschalteten 3D-Effekten Probleme auf. Meist bekommt der VNC-Client dann nur beim Verbindungsaufbau ein Bildschirmfoto des Servers übertragen, dieses verändert sich aber bei Aktionen nicht mehr (Maus- und Tastatureingaben werden also "blind" vom Client zum Server übertragen). Als Abhilfe können im Konfigurationseditor die 3D-Effekte abgeschaltet werden, siehe
diese Anleitung . Alternativ kann für private Zwecke TeamViewer eingesetzt werden.
Auch KDE bringt einen solchen Server in der Standardinstallation mit. Alternativ kann er über das Paket
krfb
mit apturl
Paketliste zum Kopieren:
sudo apt-get install krfb
sudo aptitude install krfb
nachinstalliert [1] werden. Nach der Installation ist er unter
"K-Menü -> Internet -> Krfb - Arbeitsfläche freigeben"
zu finden. Um den Server zu starten, muss eine Einladung ausgesprochen werden. Im nächsten Schritt erhält man die IP, auf der der Server läuft und ein Passwort. Beides wird von einem Client benötigt, der sich verbinden möchte.
Bei diesem Server wird keine neue Session eröffnet, sondern die bestehende genutzt. Dadurch ist es möglich, in den laufenden Betrieb eines anderen Rechners "einzugreifen", obwohl ein Benutzer angemeldet ist.
Auf Systemen mit Fenstermanager, die keinen eigenen VNC-Server mitbringen, kann ein solcher zusätzlich installiert werden. Auch wenn die hauseigenen VNC-Server für bestimmte Anforderungen nicht ausreichen, kann dieser Weg gewählt werden. Dieser Abschnitt richtet sich vor allem an fortgeschrittene Benutzer. Einsteiger sollten der Einfachheit halber auf die oben genannten Möglichkeiten zurückgreifen.
Es gibt einige Implementierungen von VNC Servern. Eine der folgenden kann gewählt werden:
Die in den Paketquellen enthaltene letzte freie Version 4.x von RealVNC ist von Anfang 2006. Folgende Pakete müssen installiert [1] werden:
vnc4server (universe [2]))
vnc-java (multiverse, optional für Java-Clienten )
mit apturl
Paketliste zum Kopieren:
sudo apt-get install vnc4server vnc-java
sudo aptitude install vnc4server vnc-java
Alternativ kann man auch TightVNC nutzen. TightVNC versucht VNC zu optimieren und neue Funktionen, Verbesserungen und Optimierungen gegenüber dem original VNC zu bieten. So eignet sich TightVNC besser, wenn der VNC-Server über DSL am Internet angebunden ist. Die neue Version von TightVNC gibt es nur für Windows. Die in den Paketquellen vorhandene alte Version bereitet teilweise Probleme (bspw. Abstürze wenn vom Vollbildmodus zurückgeschalten wird). TightVNC 1.x kann man aus den Paketquellen installieren.
tightvncserver (universe [2] )
xtightvncviewer (universe )
tightvnc-java (universe, optional für Java-Clienten )
mit apturl
Paketliste zum Kopieren:
sudo apt-get install tightvncserver xtightvncviewer tightvnc-java
sudo aptitude install tightvncserver xtightvncviewer tightvnc-java
TigerVNC ist ein Fork von TightVNC und wird aktuell (2012) gepflegt.
Zusätzliche Fremdquellen können das System gefährden.
Anmerkung: TigerVNC ist noch nicht in den offiziellen Paketquellen enthalten und muss daher von Fremquellen installiert werden. Dazu muss eine zusätzliche Software Paketquelle eingebunden werden:
sudo sh -c "wget -O - http://winswitch.org/gpg.asc | apt-key add -" sudo sh -c "echo deb http://winswitch.org/ `lsb_release -cs` main > /etc/apt/sources.list.d/winswitch.list" sudo apt-get update
Danach können die Pakete installiert werden.
tigervnc-server
tigervnc-viewer
mit apturl
Paketliste zum Kopieren:
sudo apt-get install tigervnc-server tigervnc-viewer
sudo aptitude install tigervnc-server tigervnc-viewer
Falls der VNC-Server auf einem Ubuntu-Server installiert werden soll, muss zusätzlich folgendes Paket installiert werden.
xfonts-base
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xfonts-base
sudo aptitude install xfonts-base
VNC, TightVNC sowie TigerVNC teilen sich die selben Konfigurationsdateien.
Damit eine Verbindung hergestellt werden kann, muss noch im Terminal [3] ein Passwort eingestellt werden. Es ist darauf zu achten, einen lokalen Benutzer zu verwenden.
vncpasswd
Möchte man, dass die komplette Desktopumgebung - also GNOME oder KDE - des Benutzers, der VNC startet, geladen wird, so kann man dies in der Konfigurationsdatei /etc/vnc.conf des VNC-Dienstes für alle Benutzer des Systems definieren. Ist die Datei /etc/vnc.conf nicht vorhanden, muss sie mit root-Rechten aus /usr/share/doc/tightvncserver/examples/vnc.conf.gz bzw. /usr/share/doc/vnc4server/examples/vnc.conf.gz nach /etc/vnc.conf extrahiert werden.
sudo cp /usr/share/doc/vnc4server/examples/vnc.conf.gz /etc/ sudo gunzip -d /etc/vnc.conf.gz
Anschließend muss die Zeile
# $vncStartup points to a script that will be started at the very beginning. $vncStartup = "/etc/X11/Xsession";
einkommentiert werden. Von da an startet automatisch die Desktopumgebung, wenn ein Benutzer einen VNC-Server startet. Alternativ kann dies auch jeder Benutzer für sich selbst festlegen. Dazu muss man in der ~/.vnc/xstartup im Homeverzeichnis Folgendes eintragen
1 2 3 | #!/bin/sh unset SESSION_MANAGER exec /etc/X11/Xsession |
Oftmals soll nicht eine komplette Desktopumgebung geladen werden; dies würde recht viel Last erzeugen, nur damit eine Desktopumgebung bereit steht, deren Möglichkeiten kaum genutzt werden. Um dem VNC-Server einen bestimmten Fenstermanager zuzuweisen, muss die Datei ~/.vnc/xstartup editiert werden [4]. Im Original sieht die Datei so aus:
1 2 3 4 5 6 | #!/bin/sh [ -r $HOME/.Xresources ] && xrdb $HOME/.Xresources xsetroot -solid grey vncconfig -iconic & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & x-window-manager & |
Um einen bestimmten Fenstermanager zu starten, ersetzt man einfach x-window-manager
. Natürlich muss der Fenstermanager installiert sein. Man kann dort zum Beispiel gdm
oder fluxbox
eintragen. Mit "&" kann man weitere Programme hinzufügen, die automatisch mit gestartet werden sollen. Das Ganze sieht danach zum Beispiel so aus:
1 2 3 | x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" &
fluxbox &
firefox &
|
Hier werden der Fenstermanager Fluxbox und der Webbrowser Firefox gestartet.
Im Beispiel unten wird eine LXDE-Sitzung mit speziellen Optionen für vncconfig
gestartet:
1 2 3 | vncconfig -sendPrimary=0 -nowin & x-terminal-emulator -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & startlubuntu |
Der bisher undokumentierte Schalter -sendPrimary=0
schaltet die Option "Send primary selection to viewers" von vncconfig
aus (die "primary selection" ist der von der Maus markierte Text), der Parameter -nowin
versteckt das Fenster. Mit dem Befehl startlubuntu
wird schlussendlich LXDE gestartet.
Um den VNC-Server zu starten, wird einfach folgender Befehl im Terminal [3] eingegeben (man sollte sich die angezeigte Displaynummer merken!):
# Für VNC und TigerVNC vncserver # Für tightvncserver tightvncserver
Der VNC-Server sollte nicht mit kill
beendet werden. Unter Angabe der Displaynummer bietet der VNC-Server eine eigene Kill-Routine:
# Für VNC und TigerVNC vncserver -kill :<Displaynummer> # Für tightvncserver tightvncserver -kill :<Displaynummer>
Um den VNC-Server bei jedem Booten des Rechners mitzustarten, empfiehlt sich die Erstellung eines Skripts, das in /etc/init.d/ gespeichert wird. Dazu mit Root-Rechten einen Editor [4] öffnen und dieses Skript, eine abgewandelte Version von linuxnetmag.org , unter /etc/init.d/vncserver abspeichern.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #! /bin/sh # Original: http://www.linuxnetmag.org/2011-03-17-eine-netzwerkinstallation-unter-suse-8-0 # Author: Guenther Zander <g.zander@hamburg.de> # # /etc/init.d/vncserver this Script # /usr/bin/vncserver Program # # Check for missing binaries FOO_BIN=/usr/bin/vncserver test -x $FOO_BIN || exit 5 # User, unter dem der VNC-Server ausgefuehrt wird VNC_USER="<User>" export VNC_USER # Set HOME of User HOME="<Home-Verzeichnis des verwendeten Users>" export HOME # Set ID for Connections FOO_ID=1 case "$1" in start) echo -n "Starting Vnc-Server with Terminal-ID $FOO_ID " # Delete old PIDs rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.pid if [ -e $HOME/.vnc/$HOSTNAME:$FOO_ID.log ]; then cat $HOME/.vnc/$HOSTNAME:$FOO_ID.log >> /var/log/vncserver.log 2>&1 rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.log fi sudo -u $VNC_USER -H $FOO_BIN :$FOO_ID 2>&1 ;; # stop) echo -n "Shutting down Vnc-Server " $FOO_BIN -kill :$FOO_ID 2>&1 cat $HOME/.vnc/$HOSTNAME:$FOO_ID.log >> /var/log/vncserver.log 2>&1 rm -f $HOME/.vnc/$HOSTNAME:$FOO_ID.log ;; # restart) $0 stop $0 start ;; # *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac |
Die Variable VNC_USER
bestimmt den auszuführenden User, HOME
bestimmt, unter welchem Verzeichnis die Konfiguration und Logs des VNC-Servers gespeichert werden und FOO_ID
bestimmt die Terminal-ID des VNC-Servers. Diese Variablen müssen den eigenen Wünschen entsprechend noch angepasst werden.
Das Skript benötigt, bevor es genutzt werden kann, noch die richtigen Rechte:
sudo chown root:root /etc/init.d/vncserver sudo chmod 0755 /etc/init.d/vncserver
Damit der VNC-Server auch wirklich bei jedem Systemstart geladen und bei jedem Abschalten ordentlich heruntergefahren wird, muss das Skript mit
sudo update-rc.d vncserver defaults
den Runlevels zugewiesen werden.
Eine komfortable und ressourcensparende Variante, eine VNC-Session zu starten ermöglicht die Verwendung von xinetd
(für Informationen zur Installation und Einrichtung siehe xinetd). Hierfür wird das Starten des VNC-Servers von xinetd übernommen.
Diese Methode benötigt kein "init-script" für den VNC-Server. Sollte bereits eines vorhanden sein, nimmt man den Server dazu einfach mit
sudo update-rc.d -f vncserver remove
aus den Runlevels.
Um sich am System anzumelden, kann gdm
(fast) genauso verwendet werden wie bei einer lokalen Authentifizierung. Damit dieser jedoch auch in einer Session mit Xvnc
als X-Server startet, müssen noch ein paar Änderungen durchgeführt werden.
Dazu öffnet man mit einem beliebigen Texteditor mit Root-Rechten die Datei /etc/gdm/gdm.conf (bzw. /etc/gdm/gdm.conf-custom) und kommentiert folgende Zeile ein:
RemoteGreeter=/usr/lib/gdm/gdmlogin
Schließlich aktiviert man noch XDMCP, hierfür sucht man sich den Eintrag [xdmcp]
.
XDMCP ist unter Ubuntu 10.04 nicht möglich - siehe GDM.
Manchmal kann es sinnvoll sein nicht den gesamten Desktop sondern nur ein Fenster freizugeben. Dazu ist folgendes Vorgehen notwendig (s. auch Blogeintrag ). Dazu muss man zunächst die Fenster-ID des freizugebenden Fensters feststellen. Man startet das Programm
xwininfo
dabei ändert sich der Mausanzeiger. Nun klickt man auf das entsprechende Fenster und u.a. die Fenster ID wird ausgegeben. Anschließend kann nur das Fenster und nicht der gesamte Desktop freigegeben werde:
x11vnc -id MyWindowId
wobei MyWindowId durch den Hex-Code von xwininfo zu ersetzen ist. Wählt man als Fenster ID pick dann wird im Hintergrund automatisch xwininfo gestartet und man kann das zu exportierende Fenster durch einfache Auswahl anklicken:
x11vnc -id pick
Zusätzliche Optionen (bspw. -xkb
-usepw
-capslock
-nodpms
) für x11vnc können wie bei der Desktopvariante mit angegeben werden. Der Zugriff auf das Einzelfenster erfolgt wie zum Desktop mit Hilfe eines Clients.
Falls eine Applikation exportiert werden soll, welche mehrere aus mehreren Einzelfenstern besteht (bspw. Gimp) empfiehlt sich die Option -appshare
. Eine ausführlichere Anleitung findet sich in den man-pages von x11vnc.
x11vnc -appshare -help
Der Client ist der Rechner, der auf den entfernten Desktop zugreift. Dies geschieht mittels eines VNC-Viewers.
Ab Ubuntu 11.10 wird Remmina empfohlen. Es ist standardmäßig installiert und lässt sich in Unity mit dem Begriff „Zugriff auf entfernte Arbeitsflächen“ starten.
Vinagre ist ein VNC-Client, der erstmals in Ubuntu Hardy Heron 8.04 integriert ist. Man findet das Programm im Menü unter
"Anwendungen -> Internet -> Betrachter für entfernte Desktops"
Vinagre kann dank einer Bedienoberfläche mit Tabs - ähnlich wie bei Webbrowsern - gleichzeitig mehrere Verbindungen mit verschiedenen VNC-kompatiblen Servern aufbauen. Diese können auch als Lesezeichen abgespeichert werden. Sollte der Zugang zu einem VNC-Server ein Passwort benötigen, so wird dieses im GNOME_Schlüsselbund gespeichert. Des weiteren kann Vinagre dank Avahi im lokalen Netzwerk nach verfügbaren VNC-Servern suchen. (siehe Vinagre)
Für Verbindungen zu entfernten Rechnern bringt Ubuntu/GNOME das Programm tsclient
mit, welches über das gleichnamige Paket
tsclient (nur bis Ubuntu 11.04)
mit apturl
Paketliste zum Kopieren:
sudo apt-get install tsclient
sudo aptitude install tsclient
installiert [1] werden kann und unter
"Anwendungen -> Internet -> Terminal Server Client"
zu finden ist. Dieses Programm erlaubt neben VNC auch Verbindungen über das "Remote Desktop Protocol" zu Windows-Servern.
Um eine Verbindung zu einem VNC-Server herzustellen, muss im Reiter "Allgemein" als Protokoll "VNC" ausgewählt werden. Der Rechnername ist die IP-Adresse bzw. der Hostname des Servers. Die anderen Felder können in der Regel freigelassen werden. Ein gegebenenfalls erforderliches Passwort wird nach dem Verbindungsaufbau abgefragt.
Falls das Protokoll "VNC" nicht auswählbar ist, muss das Paket
xvnc4viewer
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xvnc4viewer
sudo aptitude install xvnc4viewer
nach installiert werden [1].
Eine weitere Alternative zum "Terminal Server Client" kann unter Umständen auch FreeRDP sein. Das dazugehörige Paket heißt freerdp-x11 und ist bereits ab Ubuntu 10.10 in den offiziellen Paketquellen enthalten.
Um sich zu einem System zu verbinden, auf dem ein VNC-Server läuft, ist in der Standardinstallation von KDE bis Ubuntu 11.10 das Programm krdc enthalten.
Um es manuell zu installieren, wird das Paket
krdc
mit apturl
Paketliste zum Kopieren:
sudo apt-get install krdc
sudo aptitude install krdc
benötigt [1]. Nach der Installation ist es unter
"K-Menü -> Internet -> Krdc - Verbindung zu Fremdrechner"
zu finden.
Neben VNC unterstützt es auch RDP (Remote Desktop Protocol) Verbindungen, wie sie beispielsweise bei Windows für die Desktopfreigabe benutzt werden.
Um eine Verbindung herzustellen muss in das Eingabefeld des Programms die IP-Adresse des Systems eingetragen werden, zu dem man sich verbinden möchte. Ist dieses ein VNC-Server, muss vor der IP vnc:/
eingetragen werden, handelt es sich um eine RDP-Freigabe, so ist es rdp:/
(Beispiel siehe Screenshot). Nach Klicken auf "Verbinden" wird versucht, das andere System zu erreichen; wurde ein Passwort vergeben, so muss es in das erscheinende Dialogfeld eingetragen und bestätigt werden.
Auf der Konsole steht der Befehl vncviewer
aus dem Paket xvncviewer [1] zur Verfügung. Dieses ist bei einer Standardinstallation von Ubuntu bereits installiert. Die Verbindung zu einem VNC-Server kann mit dem Befehl
# Für VNC und TigerVNC vncviewer host:display # Für TightVNC xtightvncviewer host:display {Optionen}
hergestellt werden. host
ist dabei der Hostname oder die IP-Adresse des Servers, display
die Nummer des angesprochenen Displays - in der Regel 0. Ist ein Passwort erforderlich, wird es nach der Verbindungsherstellung abgefragt. Falls der vncviewer nicht aus einer Konsole heraus gestartet wird (sondern beispielsweise aus einem Skript), wird das Passwort in einem kleinen Eingabefenster eingegeben. Damit nicht mehrere Benutzer gleichzeitig auf den VNC-Server zugreifen können, kann im TightVNC Viewer die Option -noshare
gesetzt werden
Die Verbindung zwischen VNC-Server und -Client ist standardmäßig nicht verschlüsselt und somit nicht für eine Übertragung über das Internet zu empfehlen. Um dennoch eine sichere Verbindung zu ermöglichen, kann man einen SSH-Tunnel für die Verschlüsselung benutzen. Voraussetzung hierfür ist, dass eine SSH-Verbindung zwischen Server und Client hergestellt werden kann.
Der VNC-Viewer kann selbst einen SSH-Tunnel herstellen. Anschließend stellt er die Verbindung nicht zum Server her, sondern zu localhost
, also dem eigenen Rechner:
vncviewer -via user@host localhost:0
host
steht dabei für die IP-Adresse oder den Hostname des Servers, user
für den Benutzernamen, mit dem die Anmeldung auf dem Server erfolgen soll.
Alternativ kann man den Tunnel auch selbst auf dem Client-Rechner herstellen:
ssh -N -L 5900:localhost:5900 user@host
Anschließend kann man sich wie gewohnt verbinden; zu beachten ist aber, dass man nicht den Rechnernamen oder die IP des anderen Rechners, sondern localhost
angibt, da SSH die Daten an den anderen Rechner weiterleitet.
vncviewer localhost:0
Nun besteht eine gesicherte Verbindung zum VNC-Server.
Damit oben genannte Methoden funktionieren, ist ein Benutzerkonto auf dem Rechner notwendig auf dem der VNC Server läuft. Eine Alternative besteht in der Benutzung von public-keys. Dazu ist ein ssh Schlüsselpaar notwenig, falls noch keins vorhanden ist, muss dieses wie im Artikel SSH beschrieben angelegt werden. Ob das Schlüsselpaar mit einer Passphrase geschützt wird, bleibt jedem selbst überlassen. Der sogenannte public-key wird standardmäßig in der Datei id_rsa.pub gespeichert. Der public-key muss auf dem Rechner auf dem der VNC-Server läuft in der Datei /home/user/.ssh/authorized_keys abgespeichert werden. Damit der Besitzer des public-key auch wirklich nur auf den VNC-Server Zugriff bekommt, müssen dessen Rechte in der Datei /home/user/.ssh/authorized_keys noch beschränkt werden (s.a. hier VNC ):
command="/bin/sleep 4294967295",no-agent-forwarding,no-pty,no-user-rc,no-X11-forwarding,permitopen="localhost:5900" <public key>
Danach hat der Besitzer des public-key durch eine der beiden oberen Methoden automatisch oder manuell Zugriff auf den VNC Server. Die Anmeldung muss dabei auch als Benutzer user
erfolgen, da sonst nicht auf die Datei /home/user/.ssh/authorized_keys zugegriffen werden kann, in welche der public-key gespeichert wurde. Die Standardeinstellungen des ssh-Servers in /etc/ssh/sshd_config unter ubuntu unterstützen sowohl einen Login durch Passwort als auch durch public-keys, dadurch sind dort prinzipiell keine Änderungen notwendig.
Wenn die Verbindung zum VNC-Server über den SSH-Tunnel klappt, kann man noch einen Schritt weitergehen und den VNC-Server auf lokale Verbindungen beschränken. Damit wird die Benutzung des SSH-Tunnels erzwungen und Angreifer können sich nicht mehr direkt mit dem VNC-Server verbinden. TightVNC startet man dazu mit dem zusätzlichen Schalter -localhost
:
tightvncserver -localhost
Für Vino kann man die Einstellung wie folgt setzen (Information übernommen von vino):
Für Ubuntu 9.04 bis einschließlich 11.04:
gconftool -s /desktop/gnome/remote_access/network_interface lo --type string
Für Ubuntu 11.10 und neuer:
gsettings set org.gnome.Vino network-interface lo
Diese Art der Verbindung ist hilfreich, wenn der Hilfesuchende keinerlei Netzwerkkenntnisse besitzt und zudem hinter einem Router sitzt. Die Einrichtung ist sehr einfach, da der Hilfesuchende nichts einzurichten hat außer einer Paketinstallation.
Hier werden nur drei mögliche Wege zu einer VNC reverse connection beschrieben - es gibt noch einige mehr.
Der einfachste Weg läuft über Gitso. Hier muss man am wenigsten einstellen und man hat einen fast automatisierten Weg bis auf die Einstellungen bei einem eventuell vorhandenen Router des Helfenden.
Gitso ist leider noch nicht in den Paketquellen enthalten und muss per Hand installiert werden. Wenn man Gitso ausprobieren will, kann man Weg 2 & 3 vernachlässigen.
Der Helfende sollte sich vorab mit dem dem Thema DynDNS-Clients bzw. generell mit dem Thema DynDNS beschäftigt haben.
Man muss einen kostenlosen Account bei DynDNS oder einem anderen Anbieter einrichten und darüberhinaus eine DynDNS besitzen. Zudem sollte der Helfende wissen, wie man sich, wenn man hinter einem Router sitzt, eine korrekte Portweiterleitung oder Portfreischaltung einrichtet. Meistens muss man - je nach Routermodell - Einstellungen für die DynDNS am Router vornehmen. Zu diesem Zwecke sollte man das Handbuch des Routers konsultieren. Wenn man diesen Weg beschreiten will, bitte unten weiterlesen unter "Weitere Schritte Weg 2 & 3"
Hier muss man keine DynDNS-Adresse einrichten, dafür hat man den Nachteil, dass man vor jeder Verbindung die IP des Helfenden (ggf. die seines Routers!) herausfinden muss - z.B. bei wieistmeineip.de . Der Helfende muss dann jedesmal dem Hilfesuchenden mitteilen, wie die IP lautet. Dieser Umstand wird durch die DynDNS in Weg 2 umgangen. Der Helfer muss sich auch hier mit Portweiterleitung oder Portfreischaltung auseinandergesetzt haben, wenn er hinter einem Router sitzt, eine eventuelle DynDNS-Einrichtung am Router entfällt hier natürlich.
Folgende Pakete müssen installiert sein [1]:
beim Helfenden das Paket
xvnc4viewer
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xvnc4viewer
sudo aptitude install xvnc4viewer
beim Hilfesuchenden das Paket
x11vnc
mit apturl
Paketliste zum Kopieren:
sudo apt-get install x11vnc
sudo aptitude install x11vnc
Nach der Installation und für jede weitere Verbindung muss der Helfende immer vor dem Hilfesuchenden, da sonst die Verbindung nicht aufgebaut werden kann, in seiner Konsole folgenden Befehl eingeben:
xvnc4viewer -listen 5500
Der Helfer hört kontinuierlich auf Port 5500, der im Router freigeschaltet sein muss, ob jemand bei ihm anklopft. Der Hilfesuchende sollte dann anklopfen mit dem Befehl in seiner Konsole:
Zunächst muss der Helfer dem Hilfesuchenden seine aktuelle IP mitteilen. Diese kann er z.B. unter wieistmeineip.de ermitteln. Dort wird gegebenenfalls die IP des Routers angezeigt; dies ist dann die richtige. Dann folgenden Befehl eingeben:
x11vnc -connect 88.77.145.104
Die IP 88.77.145.104 ist nur eine Beispiel-IP und muss durch diejenige ersetzt werden, die der Helfer bei sich herausgefunden hat.
Nun sollte sich ein Fenster öffnen, auf dem der Helfer den Desktop des Hilfesuchenden sehen und steuern kann.
Wenn die erste Verbindung steht, ist es meist praktisch, dem Hilfesuchenden einen Starter auf den Desktop zu legen, der den Befehl im Terminal für ihn ausführt. Oftmals werden Befehle im Terminal seitens des Hilfesuchenden vergessen, mit Tippfehlern eingegeben oder es besteht eine Hemmschwelle in der Benutzung des Terminals. Außerdem ist dieser Weg am wenigsten störanfällig.
Es ist zu empfehlen, sich den Desktop etwas verkleinert darstellen zu lassen, da der Desktop des Hilfesuchenden meistens nicht ganz auf den Bildschirm des Helfers passt. Das kann zwar zu minimalen Verzerrungen in der Darstellung führen, ist beim Arbeiten jedoch meist praktischer. Dazu sollte der Hilfesuchende zum Anklopfen folgenden Befehl mit der zusätzlichen Option -scale X/Y
eingeben:
x11vnc -connect name.dyndns.org -scale 9/10
beziehungsweise
x11vnc -connect 88.77.145.104 -scale 9/10
Dadurch wird der Bildschirm des Hilfesuchenden vor der Übertragung auf 9/10 verkleinert. Statt 9/10 kann man jeden anderen Wert eingeben, z.B. 2/3, wenn der Desktop auf 2/3 verkleinert dargestellt werden soll.
Die aufgebaute Verbindung hat meist nur eine sehr geringe Farbdarstellung, damit der VNC möglichst wenige Daten übermitteln muss. Dies macht Sinn, weil die Verbindung meistens relativ langsam ist.
Will man sich alle Farben beim Hilfesuchenden anzeigen lassen, muss man die Option -FullColor
beim Helfenden setzen. Entsprechend Weg 2 & 3 sieht der Befehl dann so aus:
xvnc4viewer -FullColor -listen 5500
Nun wird der Bildschirmaufbau langsam, jedoch mit allen Farben erfolgen.
Noch mehr Optionen, Beispiele und Erklärungen findet man auf den manpages von x11vnc und xvnc4viewer.
Auch diese Methode verfolgt das Ziel, den Konfigurationsaufwand für den Hilfesuchenden so gering wie möglich zu halten. Deshalb baut der Hilfesuchende hier mit dem schon vorinstallierten SSH Client eine normale SSH-Verbindung zum Helfer auf. Durch diese wird dann eine umgekehrte VNC-Verbindung getunnelt. Folgende Schritte sind dabei bei Hilfesuchenden und Helfer vorzunehmen:
Sofern der Helfer hinter einem Router sitzt, ist dort eine Portweiterleitung für die SSH-Verbindung einzurichten. Läuft eine Firewall auf dem System des Helfers, so muss auch diese so konfiguriert werden, dass sie die SSH-Anfrage des Hilfesuchenden durchlässt.
Installation des SSH-Servers.
Installation des vncviewers:
xvnc4viewer
mit apturl
Paketliste zum Kopieren:
sudo apt-get install xvnc4viewer
sudo aptitude install xvnc4viewer
Anlegen eines Benutzers, mit dem sich der Hilfesuchende dann per SSH auf dem Rechner des Helfers anmelden kann.
Ermittlung der eigenen IP oder alternative Einrichtung von DynDNS.
Installation des VNC-Servers.
x11vnc
mit apturl
Paketliste zum Kopieren:
sudo apt-get install x11vnc
sudo aptitude install x11vnc
Helfer: Start des SSH Server:
sudo /etc/init.d/ssh restart
Helfer: Start des VNC-Viewers im Listen-Modus:
vncviewer -listen
Hilfesuchender: Start der SSH-Verbindung mittels SSH-Client und Verbindung zum lauschenden VNC-Viewer:
ssh -f -L 5500:localhost:5500 hilflos@IP-des-Helfersystems sleep 10; x11vnc -connect_or_exit localhost:5500
Der letzte Befehl startet vom System des Hilfesuchenden eine SSH-Verbindung zum System des Helfers. Diese SSH-Verbindung läuft im Hintergrund (-f
-Option). Durch diese hindurch verbindet sich der Hilfesuchende nun mit seinem VNC-Server auf den lauschenden VNC-Viewer des Helfers. Das elegante an dieser Lösung ist, dass mit dem schließen des VNC-Viewers auf der Helferseite sogleich der VNC-Server und die SSH-Verbindung auf Seiten des Hilfesuchenden sauber geschlossen werden.
Wenn der Hilfe-Suchende über das Internet von einem Helfer unterstützt werden soll, benötigt der Helfer (Client) Informationen über den Server (Hilfe-Suchende); diese muss ihm der Hilfe-Suchende mitteilen. Notwendig sind - sofern DynDNS nicht verwendet wird - IP-Adresse und Display-Nummer. Letztere kann von 0 abweichen, wenn auf dem Server-Rechner z. B. mehrere User angemeldet sind. Um es dem Hilfe-Suchenden möglichst einfach zu machen, kann für diesen (im Voraus) ein Starter im Menü oder Panel angelegt werden, der die Informationen ermittelt und ausgibt. Der Starter muss folgendes ausführbares Skript aufrufen:
1 2 3 4 5 6 | #!/bin/bash DISPLAY_NUMBER=`echo $DISPLAY | cut -c 2` IP_ADDRESS=`wget http://checkip.dyndns.com/ -O - 2>/dev/null | grep "Current IP Address" | cut -d ":" -f 2- | sed 's#</body></html>##g' | sed 's/ //'` zenity --info --text "IP-Adresse: $IP_ADDRESS\nDisplay-Nummer: $DISPLAY_NUMBER" --title "VNC-Info" |
Das Paket zenity
muss dazu installiert sein.
Unter Xfce (Xubuntu) wird in der Standard-Einstellung das Tastatur-Layout nicht korrekt übertragen. Das Problem wird behoben, indem man im Hauptmenü "Einstellungen -> Einstellungen -> Tastatur -> Tastaturbelegung" (ab Xubuntu 12.10 nur noch "Einstellungen -> Tastatur -> Tastaturbelegung") aufruft, dort die Option "Systemweite Einstellungen benutzen" deaktiviert und bei "Tastaturbelegung" die gewünschte Sprache einstellt. Nach einem Neustart des VNC-Servers sollte das Tastaturproblem behoben sein.
Drag&Drop funktioniert in der in Ubuntu Lucid Lynx 10.04 verwendeten Programmversion nicht, siehe 587856 und diesen
Blogeintrag . Als provisorische Lösung kann in einem Editor [4] mit Root-Rechten in der Datei /etc/apt/preferences.d/pinGnomeForRemoteAccess (erweitert durch libgtk2.0-dev) die Verwendung funktionsfähiger älterer Pakete erzwungen werden:
Package: libgtk2.0-0 Pin: version 2.20.0-0ubuntu4 Pin-Priority: 1001 Package: libgtk2.0-bin Pin: version 2.20.0-0ubuntu4 Pin-Priority: 1001 Package: libgtk2.0-dev Pin: version 2.20.0-0ubuntu4 Pin-Priority: 1001 Package: libgail18 Pin: version 2.20.0-0ubuntu4 Pin-Priority: 1001 Package: libgail-common Pin: version 2.20.0-0ubuntu4 Pin-Priority: 1001 Package: gtk2-engines-pixbuf Pin: version 2.20.0-0ubuntu4 Pin-Priority: 1001
Um ein einzelnes Programm auf einem Rechner (meist an einen Beamer angeschlossen) z.B. Schülern freizugeben, damit diese mit dem eigenen Endgerät demonstrieren und nachvollziehen können, nutze ich folgendes Skript:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #!/bin/bash passwortdatei=$(mktemp) # Passwort erstellen date +%N | grep -o ^.... > $passwortdatei; hinweise="Passwort: $(cat $passwortdatei) $(/sbin/ifconfig | grep -o inet\ Adresse:[0-9\.]*)" programm="$*" # Unterfenster erzeugen Xnest -geometry 1024x720 :4 & # VNC draufschalten x11vnc -shared -forever -zeroconf -noshm -passwdfile $passwortdatei -display :4 & lxterm -fs 40 -display :4 -e "ratpoison & $programm; rm $passwortdatei" & sleep 5; ratpoison --display :4 -c "echo $hinweise" sleep 5; ratpoison --display :4 -c "echo $hinweise" sleep 5; ratpoison --display :4 -c "echo $hinweise" sleep 5; ratpoison --display :4 -c "echo $hinweise" |
Das Skript kann ausführbar im Suchpfad liegen, z.B. mit dem Dateinamen "start-vnc". Ein Programm lässt sich dann mit "start-vnc <Programm> <Parameter>" starten.
Das Skript setzt die Pakete xnest und ratpoison voraus.
Virtual Network Computing - Entwicklerseite von VNC
VNC-Server Manualpage - Beschreibung und Startbefehle für den VNC-Server
Virtual_Network_Computing - Wikipedia
TightVNC - Open Source VNC-Server und -Viewer, Linux, Unix und Windows, Viewer auch für Java
TigerVNC - Aktueller Open Source VNC-Server und -Viewer, Linux, Unix, Mac und Windows, Viewer
UltraVNC - noch ein Open Source VNC-Server und -Viewer für Windows, Java-Viewer mittels Browser
Lösung bei Problemen von Vino in Zusammenhang mit 3D-Effekten und bestimmten Treibern
Das eigene PC-Helpdesk - Blogeintrag 09/2009
Fernhilfe - X-Window-Desktop fernsteuern per Shell-Skript und VNC - Heise Netze, 05/2008