http://de.wikipedia.org/wiki/OpenSSH
Mit SSH kann man einen verschlüsselten Datenkanal zwischen zwei Linux-PCs aufbauen. Verschiedene Programme sind in der Lage, diesen Kanal zu nutzen.
Terminals
grafische Ausgaben
Filesysteme
Filemanager
Remote-Desktops, wie 'X2GO'
Und noch viel mehr:
Da alle netzwerkfähigen Programme mit einem anderen PC über bestimmte Ports kommunizieren, kann man den Datenverkehr zwischen diesen Ports durch einen 'Tunnel' leiten, der über SSH aufgebaut wird.
Liste der Ports auf einem Ubuntu-PC:
/etc/services
Hier wird die Verwendung von SSH in einem vertrauenswürdigen 'Familien-Netz' beschrieben. Alle Benutzer dieses Netzes teilen sich die Ressourcen ihrer PCs über ein unsicheres Netz, dem Internet. Mit SSH wird das vorher unsichere Netz sicher. Die Daten laufen verschlüsselt über das Netz und eine 'Mitlesen' vom 'Man in the Middle' ist ausgeschlossen.
http://de.wikipedia.org/wiki/Man-in-the-middle-Angriff
Auch innerhalb eines lokalen Netzes hinter einem Router lohnt es sich, SSH einzusetzen. Ein im lokalen Netz sicheres Netbook ist schnell mal unterwegs an ein unsicheres Netz angeschlossen, und das war's dann mit der 'lokalen Sicherheit durch den Router'. Besser ist es, die Sicherheit des Zugriffs auf den PC/Netbook/Notebook unabhängig vom Zustand des gerade verwendeten Netzes zu konfigurieren.
Das gilt insbesondere für den 'entfernten Desktop', der sich per Mausklick einfach freigeben lässt.
http://www.tim-bormann.de/pc-fernsteuern-remote-desktop-zugriff/
http://wiki.ubuntuusers.de/VNC
aus dem Repository, mit apt-get od. Synaptic: ssh
Server und Client installieren, auf allen beteiligten PCs
SSH-Server startet automatisch
Sofort nach der Installation folgendes ändern:
Im File /etc/ssh/sshd_config folgende Zeilen ändern (als Root):
* Zeile 26
PermitRootLogin no
* Zeile 50
PasswordAuthentication no
In Zeile 50 auch das Kommentarzeichen (#) entfernen, sonst ist der Eintrag unwirksam. Die Voreinstellung ist ein Login mit Passwort, das muss abgeschaltet werden.
Server neu starten: /etc/init.d/ssh restart
Danach ist der Login als Root über das Netz abgeschaltet.
Und ein Login über das Netz mit Benutzername/Passwort ist auch nicht mehr möglich.
Das sichert den PC gegen Angriffe von aussen ab. SSH ist für Angriffe sehr beliebt. Einfache Benutzernamen/Passwörter sind für einen Einbrecher in den PC kein Hindernis, es werden komplette Wörterbuchlisten abgearbeitet. Sind alle Login-Möglichkeiten eines Login über Benutzername/Passwort abgeschaltet, ist der PC gegenüber solchen Angriffen sicher. Ein Login über Schlüssel ist sehr sicher und sollte bevorzugt werden.
Mit ssh-keygen -t rsa ein Schlüsselpaar erzeugen.
Das von 'ssh-keygen' verlangte Passwort kann man leer lassen, es hat für die Sicherheit der Verbindung keine Bedeutung. Mit dem Passwort wird der private Schlüssel gegen Diebstahl gesichert, was für Notebooks evtl. nötig ist.
ssh-keygen erzeugt ein Schlüsselpaar im Sub-Folder '.ssh' des Home-Folders des Benutzers:
/home/benutzer/.ssh/id_rsa /home/benutzer/.ssh/id_rsa.pub
Der erste ist der private Schlüssel, der niemals weitergegeben werden darf.
Der zweite, 'id_rsa.pub', ist der öffentliche Schlüssel, der bedenkenlos verteilt werden kann. Die Schlüssel enthalten einen langen kryptischen Text, der keine Sonderzeichen enthält.
Der öffentliche Schlüssel kann daher problemlos, z.B. per EMail, versendet werden. Der private Schlüssel enthält zur Sicherheit und Wiedererkennung den Text: 'PRIVATE KEY'
Auf allen beteiligten Client-PCs des zukünftigen privaten Familien-Netzwerkes wird jeden Benutzer ein solches Schlüsselpaar erzeugt. Der private Schlüssel verbleibt immer auf dem Client im Verzeichnis des Benutzers. Der öffentliche Schlüssel muss zum Server.
Mit USB-Stick, per EMail oder anderen Mitteln, wird der Schlüssel zum Besitzer des entfernten PC gebracht. Dieser kopiert den öffentlichen Schlüssel in den File /home/benutzer/.ssh/authorized_keys2, der u.U neu angelegt werden muss.
Falls man auch den Zugriff vom anderen PC aus auf den eigenen PC ermöglichen will, muss den öffentlichen Schlüssel des anderen PC in die eigene authorized_keys2 kopiert werden.
Der autorized_keys2 File enthält alle öffentlichen Schlüssel der PCs, die auf diesen PC zugreifen dürfen.\\ Der Besitzer des PC hat damit eine einfache und transparente Kontrolle, wer alles auf seinen PC zugreifen darf.
(entfällt wenn der PC direkt mit dem Internet verbunden ist, z.B. über DSL-Modem)
Ein Home-Router setzt die externe IP-Adresse, die man vom Provider erhält, in eine interne IP-Adresse um, die nur im lokalen Netz in der eigenen Wohnung sichtbar ist. Diese interne Adresse beginnt meist mit 192.168. ...
Mit
sudo ifconfig
kann sich im Terminal die eigene interne Adresse anzeigen lassen. Interne IP-Adressen werden durch den Router nicht in das Internet weitergeleitet.
Hintergrund:
http://de.wikipedia.org/wiki/Network_Address_Translation#Source_NAT
Im Internet ist daher nur der Router und nicht der PC sichtbar. Eine SSH-Verbindung zum SSH-Server-PC ist so nicht möglich. Im Router muss der Port 22 als 'Portweiterleitung' zum dem PC eingestellt werden, der als SSH-Server eingesetzt wird.
Details dazu bitte der Beschreibung des Routers entnehmen.
Ist das erfolgt, gelangen die Daten für den Port 22 an den richtigen PC.
http://de.wikipedia.org/wiki/Portweiterleitung
Bemerkung zu Port 22
Oft kann man den 'Tipp' bekommen, doch nicht den Port 22 für SSH zu verwenden, weil der Port 22 ein häufiges Ziel von Angriffen sei.
Ein Betrieb von SSH über einen anderen Port ist problemlos möglich, aber
* es schützt nicht vor Angriffen, weil ein Angreifer das schnell entdeckt
gegen ein unsicher konfiguriertes SSH schützt ein anderer Port auch nicht
alle SSH Verbindungen, die mit mir Kontakt aufnehmen wollen, müssen diesen anderen Port verwenden
das führt zu der beliebten Frage 'wer hat nun welchen Port?', wenn man verzweigte Netze aufbauen will
es verletzt Regeln im Internet, die Ports sind nach der Liste in /etc/services vergeben
und die Dienste werden auf diesen Ports erwartet
Gründe für die Verwendung anderer Ports für SSH:
* der PC ist hinter einer Firewall, die Port 22 blockt
die gelegentlichen Angriffe auf Port 22 erzeugen eine zu grosse Netzlast,
was für einen Home-PC untergeordnet ist
man hat nur wenige SSH-Verbindungen und die gemeinsame Verständigung auf einen anderen Port ist kein Hindernis.
Der Router bekommt vom Provider eine IP-Adresse zugewiesen, die sich täglich ändern kann Nur über diese IP Adresse ist dann auch per SSH der PC über das Internet erreichbar.
Wie ermittelt man die IP-Adresse des Routers?
Die Webseite http://www.wieistmeineip.de/ zeigt die IP-Adresse des Routers an.
Das ist die Adresse, mit der man selbst Internet unterwegs ist.
Möchte man eine SSH-Verbindung aufbauen, muss man den Besitzer des entfernten PC nach seiner momentanen IP-Adresse fragen (telefonisch).
Will man das vermeiden, kann der Router die momentane IP-Adresse unter einem Namen, der immer gleich bleibt, im Internet bekanntgeben.
Details, siehe hier: http://de.wikipedia.org/wiki/DynDNS
Aus der sich ständig ändernden IP-Adresse wird dann z.B. 'mein-linux-beispiel.example.com'.
Unter dieser gut merkbaren Adresse sind wir dann im Internet erreichbar.
Viele Router haben die Möglichkeit, einen DynDNS-Client zu konfigurieren.
Mit
ssh benutzer@IP-Adresse
bekommt man auf dem PC mit der IP-Adresse eine Terminalsitzung. Man hat dort die gleichen Rechte wie der 'Benutzer'.
Mit
ssh -X -C benutzer@IP-Adresse
bekommt man auch ein Terminal. Aber mit -X können grafische Ausgaben übertragen werden und -C komprimiert die Daten.
Startet man jetzt auf dem entfernten PC z.B. den Firefox mit:
firefox
dann wird auch der Firefox auf dem anderen PC gestartet, aber die Ausgabe in ein Fenster wird auf meinem PC, an dem ich sitze, umgeleitet.
Das funktioniert durch das X-Windows-System mit jedem grafischen Programm. Man kann über SSH den entfernten PC so benutzen, als wäre man vor Ort.
Auch die grafischen Ausgaben, hier vom Firefox, werden von SSH verschlüsselt übertragen.
Die Filemanager von GNOME (Nautilus) und KDE (Dolphin, Konqueror) können mit SSH umgehen. Man gibt in die Adresszeile als Protokoll nicht 'http' sondern 'ssh' an.
ssh://benutzer@IP-Adresse
Im Konqueror muss man statt 'ssh' 'fish' eigeben.
Jetzt bekommen wir kein Terminal, sondern ein Fenster im Filemanager. Alles was man mit dem Filemanger am PC machen kann, funktioniert auch im Fenster des entferrnten PC.
Man kann alle üblichen Aufgaben im Filemanager erledigen, als wäre der PC vor Ort.
Files kopieren, verschieben, ansehen, usw.
Immer dabei berücksichtigen, dass dabei der Datenverkehr über das SSH-Netz geht. D.h. das Kopieren grosser Files kann länger dauern. Die Bildvorschau ist aus Performancegründen abgeschaltet.
Entscheidend ist beim Kopieren die Uploadrate des PC und nicht die mögliche Downloadrate des eigenen PC. Bei privaten Internetverbindungen ist die Upload-Rate oft sehr gering.
Nicht gleich den Provider anrufen, wenn das alles sehr langsam abläuft. ;-)
Jetzt wird es kompliziert.
Um den entfernten Desktop-Zugriff abzusichern, benötigen wir einen Tunnel, der Daten des Port 5900 sicher über Port 22 überträgt.
Hier wird nur dieser spezielle Fall des Ports 5900 betrachtet.
Hintergründe zum 'Tunnelbau' findet man in der Wikipedia:
http://de.wikipedia.org/wiki/Tunnel_%28Rechnernetz%29
Mit
ssh -L 5906:localhost:5900 benutzer@IP-Adresse
am eigenen PC wird ein SSH-Tunnel vom entfernten PC zum eigenen PC aufgebaut.
Zusätzlich wird noch ein Terminal zugewiesen, was manchmal sehr nützlich ist.
Was passiert hier?
Alle Daten vom Port 5900 des entfernten PC, dem Server, werden über den SSH-Port verschlüsselt zum Port 5906 meines PC übertragen.
D.h. am Port 5906 meines PC (!) stehen die Daten des entfernten Desktop des anderen PC zur Verfügung.
Ein Desktop-Betrachter ('vncviewer') benötigt jetzt keinen Zugriff auf das Internet mehr, um den entfernten Desktop anzuzeigen.
Alle nötigen Daten werden durch SSH auf dem lokalen PC zur Verfügung gestellt. Mit
vncviewer :6
auf meinem PC kann man den Desktop des entfernten PC anzeigen (der dazu natürlich freigegeben werden muss).
:6 ist der Offset zu 5900.
Mit verschiedenen Offsets kann man gleichzeitig den Desktop von mehreren entfernten PCs anzeigen und steuern.
z.B.:
ssh -L 5904:localhost:5900 benutzer2@andere-IP-Adresse
und
vncviewer :4
Aufpassen, dass man immer die Kontrolle darüber behält,
in welchen Fenster welcher PC zu sehen ist. ;-)
#!/bin/bash # Autor: Richard # Terminalverbindung zu einem remote PC mit ssh SSHUSER=remoteUser SSHHOST=remotePC SSHURL=$SSHUSER@$SSHHOST echo "Verbinde mit ssh -X -C $SSHURL" ssh -X -C $SSHURL
Aufbau einer SSH Verbindung mit Terminal.
Unter
SSHUSER=remoteUser SSHHOST=remotePC
ist der Benutzer und die IP-Adresse des entfernten PC einzutragen.
#!/bin/bash SSHUSER=remoteUser SSHHOST=remotePC SSHURL=$SSHUSER@$SSHHOST echo "Desktop Tunnel fuer Remote-Desktop mit: ssh -L 5906:localhost:5900 $SSHURL" ssh -L 5906:localhost:5900 $SSHURL
Aufbau eines Tunnels, wie beschrieben.
#!/bin/bash # lokaler Backupfolder = backup # lokaler Folder für gelöschte files = backup_save rsync --delete -avzbe ssh remoteUser@host:/home/remoteUser backup --backup-dir=backup_save # echo "sync done"
Beispiel, wie man mit SSH die Daten eines Benutzers auf dem entfernten PC über das Internet auf dem eigenen PC sichern kann.
(kann lange dauern, Upload-Problem, s.o.)
#!/bin/bash # sshfs muss installiert sein # das Script muss in dem Folder aufgerufen werden, in dem auch der lokale Folder liegt # oder entsprechend anpassen echo "Verbinde mit sshfs " sshfs remoteUser@host:/home/remoteUser lokalerFolder
Mit FUSE kann man ein ganzes Filesystem eines entfernten PC in das Filesystem des eigenen PC einbinden.
Damit können die Daten des anderen PC so genutzt werden, als wären sie lokal. Programme, die diese Daten verarbeiten, brauchen keine Kenntnis von SSH und müssen auch nicht netzwerkfähig sein. FUSE
#!/bin/bash # echo "Trenne sshfs Verbindung mit fusermount -u lokalerFolder" fusermount -u lokalerFolder
löst die Verbindung von FUSE.
Die Texte, 'Remote-Desktop', 'iptables ' und dieser hier, gehören zusammen. Erst wenn alle drei Texte verstanden wurden, ist es möglich, eine sichere Verbindung zu einem entfernten Desktop aufzubauen.
Installation von SSH
Erzeugen der Schlüssel
Absichern des Servers
Verteilen der öffentlichen Schlüssel
Testen
und fertig
SSH ist der Standard zur sicheren Verbindung von Linux-PCs.
Es wird keine zusätzliche Software benötigt.
Alles ist in Linux 'out of the box' enthalten.
Mit der Verbindung über einen Filemanager (s.o.) bekommt man ein transparentes Netzwerk zum Datenaustausch im vertrauten Bekanntenkreis ohne sich umständliche Passwörter merken zu müssen.
Man muss nur die öffentlichen Schlüssel austauschen und in
~/.ssh/authorized_keys2
des anderen PCs eintragen lassen.
D.h. der öffentliche Schlüssel des SSH-Client kommt auf den SSH-Server. Der private Schlüssel verbleibt auf dem SSH-Client.
Jeder Ubuntu-PC kann gleichzeitig SSH-Client und SSH-Server sein.
In meiner Familie sind wir alle ständig über SSH verbunden. Wir haben ein sehr sicheres Familien-Netzwerk zur privaten Kommunikation.. Lange Email-Anhänge benötigen wir nicht mehr. Es geht alles per Copy/Paste, direkt und sicher.
Und anstatt Programme zu installieren, verwenden wir gegenseitig die installierten Programme des anderen PC.
Interessant wird es im Urlaub.
Mein PC ist aus stromsparenden Komponenten aufgebaut, die durchlaufen können. Dieser PC bleibt angeschaltet und mit den Techniken von SSH kann ich mit dem kleinen Netbook auf meinen PC zugreifen und die Ressourcen eine grossen PC nutzen.
Zusätzlich haben wir noch noch eine Verbindung über Jabber, um kurze Nachrichten ohne Zeitverlust auszutauschen. Jabber
Was will man mehr?
Das ist 'privates Cloudcomputing' der Oberklasse. Voraussetzung ist, dass die Teilnehmer des SSH-Netzes einander vertrauen.
Es ist nicht mehr notwendig, einem Fremdanbieter für diese Dienste 'zu vertrauen', was in unsicheren Zeiten ein Problem werden kann.