ssh again



Nochmals zur Wiederhohlung:

ssh -l maxmeier somehwere.over.the.rainbow.at

oder:

ssh maxmeier@somewhere.over.the.rainbow.at

erlaubt einem das Einloggen auf einem anderen Rechner unter eben diesem Benutzernamen (hier: maxmeier ) sofern man das Passwort dafür kennt.

(ist der Name am lokalen Computer auch "maxmeier" so kann man die Angabe des Namens weglassen)

Der Datenverkehr am Netzwerk wird dabei verschlüsselt. Loggt man das erste mal auf diesem Rechner ein, so erhält man eine Warnung, dass der andere Computer unbekannt ist. Akzeptiert man die Verbindung, dann merkt sich das ssh in der Datei:

~/.ssh/known_hosts

unterhalb des Homeverzeichnisses den Schlüssel dieses Rechners. In Zukunft wird eine Verbindung nur noch akzeptiert, wenn der Schlüssel mit dem gespeicherten übereinstimmt.

Obwohl nun der Datenverkehr übers Netzwerk verschlüsselt ist, sollte man sich keinesfalls in Sicherheit wiegen. Was sind die verbleibenden Gefahren?

1.) Führt man das ssh auf einem Rechner aus, der nicht sicher ist, so besteht immer die Gefahr, dass auf diesem Computer ein Programm laüft, das alle Tastendrücke mitprotokolliert oder, dass dort eine veränderte Version des ssh-Programms liegt, die die Passwörter abspeichert und an Hacker verschickt..etc..

D.h. ssh ist nicht sicher, wenn es von einem unsicheren Rechner aus aufgerufen wird.

Abhilfe: Einmal-Passwörter entschärfen die Situation ein klein wenig aber sind auch kein totaler Schutz.


2.) Loggt man das erste Mal auf einem anderen Rechner ein, so ist der Schlüssel noch nicht bekannt. Beim ersten einloggen könnte also zwischen dem lokalen Computer und dem anderen auf dem wir einloggen wollen ein Hacker sitzen der so tut als wäre er der andere Computer. Eine "man-in-the-middle"-Attacke wäre also beim ersten einloggen möglich.

Abhilfe: Entweder die Fingerprints des eigenen Rechners merken oder die known_hosts systemweit für alle oft benutzten Computer vorinstallieren .


3.) Ist der Computer nicht sicher auf den man einloggt, so kann dieser Computer beim einloggen das passwort im Klartext abspeichern. Wenn du dasselbe Passwort auf mehreren verschiedenen Computern verwendest, sind dann die anderen Computer auf denen du das selbe Passwort hast auch gefährdet..

Abhilfe:

  • Unterschiedliche Passwörter verwenden. Wenn schon nicht verschiedene für jedes System, dann zumindestens nach Sicherheitslevel gruppiert.

  • Neuere Versionen können das Passwort mit einem Protokoll namens SRP (secure remote passwort) überprüfen. Dabei wird das Passwort dem entfernten Computer nie im Klartext präsentiert. (ist aber noch nicht sehr verbreitet)

  • Man verwendet RSA-Schlüssel. Darüber lernen wir ein anderes mal.



  • Zurück zu den praktischen Dingen.

    Beim Aufruf von ssh kann man auch einen Befehl angeben, der am entfernten Computer ausgeführt werden soll:

    ssh maxmeier@irgendwo.at fortune

    würde das Programm fortune am anderen Computer aufrufen, anstatt sich dort einzuloggen.

    Damit ist es jetzt möglich Filter auch zwischen Computern laufen zu lassen. z.B.:

    fortune | ssh maxmeier@irgendwo.at grep the >blabla.txt

    würde lokal "fortune" aufrufen. Die Ausgabe des Programmes aber via ssh übers Netzwerk zum anderen Computer schicken. Dort das Programm "grep" benutzen, um alle Zeilen zu suchen, die das Wort "the" enthalten und die Ausgabe würde wieder via netzwerk zurück zum eigenen Computer geschickt und in der Datei blabla.txt gespeichert werden.

    So würde zum Beispiel:

    ssh irgendwo.at cat blabla.txt > blibli.txt

    eine Kopie der Datei blabla.txt vom anderen Computer auf den lokalen Computern in die Datei blibli.txt schreiben.

    Hat man Zugriff auf eine Soundkarte, würde der Befehl

    cat /dev/audio | ssh irgendwo.at "cat - > /dev/audio"

    alle Daten die aus der speziellen Datei /dev/audio gelesen werden (dort hat man Zugriff auf das, was der Computer via Soundkarte "hört") auf den anderen Computer kopieren und dort mit dem Befehl:

    cat -

    (der liest von Standardeingabe und schreibt nach Standardausgabe)

    und würde die Daten dort durch Schreiben auf die spezielle Datei "/dev/audio" dort am Lautsprecher wieder ausgeben.

    Man beachte die Anführungszeichen in obigen Befehl. Anderenfalls würde die Umleitung am eigenen Computer und nicht am entfernten ausgeführt.

    Eine weitere nützliche Funktion ist, dass ssh neben der Login-Verbindung auch zusätzliche "Tunnel" zwischen den Computern aufbauen kann.

    z.B.:

    ssh -L 7000:irgendwo.at:25 maxmeier@irgendwo.at

    macht einen Tunnel vom lokalen Port 7000, der mit dem anderen Computer Port 25 verbunden ist.

    telnet 7000 localhost

    würde einen jetzt z.B. mit dem Mailserver von irgendwo.at verbinden. Nur, dass die Daten jetzt durch den verschlüsselten Tunnel gehen.

    Umgekehrt kann man wenn man -R statt -L verwendet, um auch Ports am entfernten Computer mit lokalen Services zu verbinden. Oft eine praktische Möglichkeit, um zu restriktive Firewalls zu überlisten.

    Besonders praktisch:

    ssh -X irgendwo.at

    Das baut dir einen Tunnel auf, der grafische X11-Programme umleitet. Du kannst also z.B. am anderen Rechner ein netscape oder xterm starten, das die Anzeige auf deiner eigenen X11-Oberfläche ausgibt.. Aber Vorsicht: man öffnet damit auch eine zusätzliche Gefahr: root (oder ein hacker) auf dem Computer, auf dem man einloggt, könnte damit dein Display oder die Tastatur von deinem Rechner abhören...


    EXERCISES:

    Diskutiere folgende Fragen:

    * Du sitzt an einem öffentlichen Windows-Terminal und hast dort das Secure Shell Programm "putty" installiert. Welchen Gefahren bist du ausgesetzt?

    * Du loggst von deinem sicheren Notebook daheim aus auf einem Rechner ein, der vermutlich von einem Hacker besetzt ist. Welche Information gibst du dadurch preis?

    * Versuche mit ssh -X grafische Programme auf einem anderen Computer zu benutzen. Was sind die zusätzlichen Gefahren dabei?


    REFERENCES:

    man ssh