Hauptseite

ssh – mehr als nur eine sichere Shell als telnet-Ersatz

22. März 2009 von

Viele kennen ssh nur um sich – wie ein sicheres telnet – über ein Netzwerk (bzw. das Internet) auf einen entfernten Rechner einloggen zu können. In diesem Artikel möchte ich auf andere interessante Funktionen des Programms eingehen. So kann man mit ssh auch sicher Dateien übertragen, Tunnel aufbauen oder X Programme forwarden.

TCP Forwarding

Eine praktische Sache, wenn man z.B. hinter einer Firewall sitzt und somit nicht auf alle Ports zugreifen kann ist das TCP forwarding. Damit lässt sich eine Art Tunnel aufbauen um Ports durch ssh auf einen beliebigen Port des eigenen Rechners durchzureichen.

Am besten lässt sich dies mit einem Beispiel erläutern:

Man sitzt hinter einer Firewall, die zwar Verbindungen zum Port 22 (ssh) durch lässt, jedoch nicht zu Port 5222 (Jabber). Des Weiteren hat man im Internet (oder zu Hause) einen Server (in diesem Beispiel mit der Adresse: ownserver.tld) stehen, zu dem man eine ssh Verbindung aufbauen kann. Wenn man nun zu einem Jabber-Server (hier beispielhaft jabber.org) Verbinden möchte baut man eine ssh Verbindung zum eigenen Server auf und richtet einen Tunnel über den lokalen Port 1234 ein:

ssh user@ownserver.tld -L 1234:jabber.org:5222

Nun kann man sich mit seinem Jabber-Client zum Server localhost an Port 1234 verbinden und es wird automatisch über ssh an den Server getunnelt. Dieser baut dann die eigentliche Verbindung zu jabber.org an den Port 5222 auf.

(Natürlich könnte man auch direkt einen Account bei einem Jabber Server anlegen, den man über Port 80 erreichen kann. Doch wenn man schon einen Account auf einem Server hat, der nur Port 5222 anbietet, möchte man nicht unbedingt einen neuen anlegen (Kontakte fehlen dann ja auch). Es ist ja auch nur ein Beispiel :-) )

Das Tunneln funktioniert mit allen Ports und allen Servern. Die Verbindung zum eigenen Server wird natürlich verschlüsselt. Das kann also auch recht praktisch sein, wenn man in einem offenen WLAN unverschlüsselte Dienste wie IRC (nicht alle Server bieten SSL Verschlüsselung an) oder Ähnliches nutzen möchte. Die Verbindung vom Server zum eigentlichen Dienst ist jedoch wieder unverschlüsselt.

Das Einrichten eines ssh-Servers zu Hause und die Konfiguration der Weiterleitung im Router setze ich hier mal vorraus.

X Forwading

Um ein X Programm, welches auf einem entfernten Rechner läuft in der lokalen X-Umgebung bedienen zu können, kann man das X Forwarding von ssh nutzen. Das Programm läuft weiterhin auf dem entfernten Rechner, nur die Ausgabe (das graphische Fenster) wird auf den lokalen Rechner weiter geleitet.

Man loggt sich mittels

ssh -X user@remotehost.tld

auf dem entfernten Rechner ein. Ab jetzt wird das Fenster jedes graphischen Programms, welches in dieser Shell gestartet wird, automatisch auf dem eigenen Rechner angezeigt.

Sicheres Übertragen von Dateien

Zur Dateiübertragung können die beiden Befehle scp und sftp genutzt werden, die (zumindest in neueren Versionen) Bestandteil von ssh sind.

sftp kann genauso wie ftp genutzt werden: Mit put und get können Dateien hoch- bzw. heruntergeladen werden. Mit cd, ls, rm, mkdir, rmdir, pwd kann auf dem entfernten Rechner wie gewohnt navigiert werden. Mit den Befehlen lcd, lls,lmkdir und lpwd kann man auf dem lokalen Rechner navigieren.

scp funktioniert ähnlich wie das normale cp Kommando. So kann man z.B. mittels

scp user@remotehost.tld:file.txt filecopy.txt

die Datei file.txt vom Rechner remotehost.tld (im Home-Verzeichnis des Users user) ins aktuelle Verzeichnis als Datei filecopy.txt kopieren.

Genauso kann man umgekehrt mit

scp filecopy.txt user@remotehost.tld:test/filecopy.txt

die Datei filecopy.txt auf den Rechner remotehost.tld ins Verzeichnis test (im Home-Verzeichnis des Users user) kopieren.

Alle Befehle übertragen die Daten verschlüsselt, so dass man sie auch in einem offenen WLAN ohne Bedenken verwenden kann.

ssh Verbindungen ohne Eingabe des Passworts

Der Aufbau einer ssh Verbindung erfordert normalerweise die Eingabe des Passworts. Um ssh auch in Scripten nutzen zu können bzw. nicht jedes Mal das Passwort eingeben zu müssen, kann man den öffentlichen ssh-Key des lokalen Rechners auf dem entfernten Rechner speichern. Dabei ist es auch möglich nur bestimmte Befehle/Programme zuzulassen um die Sicherheit etwas zu erhöhen. Alle oben genanannten Funktionen funktionieren so auch ohne Passworteingabe.

Und so geht es:

Zuerst legt man auf dem lokalen Rechner unter dem Benutzer, mit dem man sich einloggen möchte (also normalerweise der User, mit dem man meistens arbeitet) einen ssh-Schlüssel an:

ssh-keygen -t rsa

Wenn nach einem Passwort gefragt wird, kann man einfach Enter drücken ohne eins einzugeben. Den öffentlichen Schlüssel, der nun in der Datei ~/.ssh/id_rsa.pub gespeichert ist kopiert man.

Nun wird auf dem entfernten Rechner unter dem Benutzer, als der man sich ohne Passwort einloggen können soll die Datei ~/.ssh/authorized_keys angelegt. In diese Datei wird der öffentliche Schlüssel kopiert. Man kann pro Zeile einen Schlüssel einfügen um so mehreren Benutzern (oder von verschiedenen Rechnern aus) den Zugriff zu gestatten. Das ganze könnte das so aussehen (der Schlüssel ist normalerweise länger):

ssh-rsa AbIkIdfyNfKfk1ie870qCEhmbQ== user@hostname

Um den Zugriff auf einen Befehl einzuschränken wird vor dem Schlüssel ein command=”befehl” eingefügt, wobei befehl für den erlaubten Befehl steht. Danach folgt der Schlüssel mit einem Leerzeichen dazwischen. Wichtig ist, dass alles in einer Zeile pro Schlüssel steht.

Das folgende Beispiel erlaubt nur das Kommando rsync (der Schlüssel ist normalerweise länger):

command="rsync --sserver --sender -vlogDtprz" ssh-rsa AbIkIdfyNfKfk1ie870qCEhmbQ== user@hostname

Schlagworte: , , , ,



Kommentieren

Kommentarlinks könnten nofollow frei sein.


Bloggeramt.de frisch gebloggt Blogverzeichnis - Blog Verzeichnis bloggerei.de