SSH mit Key absichern

  • In diesem Tutorial zeige ich euch wie ihr SSH mit einem Key absichert.

    Für diesen Tutorial werden die Programme Putty und PuttyGen benötigt. Diese können hier heruntergeladen werden LINK

    1. loggt euch via ssh mit Putty auf eurem RPI ein

    Code
    mkdir /home/pi/.ssh
    ssh-keygen -t rsa -b 4096  
    >> bei der Pfad Abfrage: /home/pi/.ssh/id_rsa
    >> Enter passphrase (empty for no passphrase) >> gewünschtes PW eingeben, es kann aber auch kein PW verwendet werden
    cp /home/pi/id_rsa.pub /home/pi/.ssh/authorized_keys
    chmod 600 /home/pi/.ssh/authorized_keys
    chmod 700 /home/pi/.ssh


    2. Um den Key auf den PC übertragen

    Code
    cd /home/pi/.ssh
    cat id_rsa  (id_rsa kann später gelöscht werden)


    3. Kopiert die Ausgabe von cat id_rsa in die Zwischenablage und fügt diese in eine leere Textdatei auf eurem PC ein und speichert diese z.B. unter rpi-key.txt.

    Code
    -----BEGIN RSA PRIVATE KEY-----
    MIIJJwIBAAKCAgEAzOHhUCcDDgGd7c7VJJp3c8fFfgTmUKvKPhiPYogs1R9XN5L0
    ..
    ..
    yWL8zRvvs1wozFF4fSANczUzyaAIAxdcuQCXTZS0JHCXDvaFqPGFNCCgUA==
    -----END RSA PRIVATE KEY-----


    4. Den Key für Putty Konvertieren, hierzu startet ihr Puttygen und importiert die Textdatei z.B. rpi-key.txt


    5. Den Puttykey mit "Save private key" speichern, solltet ihr unter Punkt 1 ein PW vergeben haben, tragt dieses in Puttygen ein bevor ihr den Key speichert


    6. Putty konfigurieren


    7. Funktionsprüfung


    Sollte die SSH Verbindung via Key (mit oder ohne Keypasswort) funktionieren, könnt ihr den SSHDienst so einrichten, damit nur noch ein Keybasierter login möglich ist.
    zur Sicherheit öffnet bitte eine 2te SSH Verbindung zu eurem PI, falls etwas schief geht..

    Code
    nano /etc/ssh/sshd_config
    
    
    PasswordAuthentication no
    UsePAM no
    PermitRootLogin no
    
    
    sudo /etc/init.d/sshd reload


    Wenn du Fragen und/oder Verbesserungsvorschläge hast, zögere nicht diese hier im Thred zu stellen.

    I sometimes feel that I have nothing to say and I want to communicate this.

  • Quote from traumspiel pid="4350" dateline="1358687033"


    ich bin nach dieser anleitung vorgegangen jedoch bekomme ich beim anmelden mit putty die fehlermeldung "server sent: puplickey".

    Korrekterweise misstraut der ssh-Server natürlich deinem Client und gibt ihm somit keine detaillierten Fehlerinformationen.
    Somit musst du dich auf dem Server anmelden (auf welchem Weg auch immer) und dort in den Log-Dateien nachschauen. In diesem Fall wirst du die interessanten Informationen in der Datei /var/log/auth.log finden.

  • Heyho,

    bin gerade nach dem Tutorial vorgegangen und mir ist ein winzig kleiner (Tipp-)Fehler aufgefallen:

    Aus:

    Code
    cp /home/pi/id_rsa.pub /home/pi/.ssh/authorized_keys


    Muss

    Code
    cp /home/pi/.ssh/id_rsa.pub /home/pi/.ssh/authorized_keys


    werden, erst dann funktioniert es.


    Viele Grüße,
    Tim :)

  • Hallo zusammen,

    man sollte auch nicht unbedingt den folgenden Befehl verwenden.

    Code
    cp /home/pi/.ssh/id_rsa.pub /home/pi/.ssh/authorized_keys

    Hat man bereits andere Schlüssel hinterlegt, wird "cp" nachfrage ob es die Datei überschreiben soll. Bestätigt man dies, sind die anderen Schlüssel weg. Lehnt man das Überschreiben ab, wird der Schlüssel folglich nicht funktioniert. Daher sollte man neue öffentliche Schlüssel immer an die Datei anfügen.

    Code
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    In der Anleitung ist noch ein weiterer Tippfehler. Das Init-Skript für den SSH-Daemon ist zumindest beim Raspbian Image vom 09.02.2013 "/etc/init.d/ssh" und nicht "/etc/init.d/sshd". Der korrekte Befehl zum Laden der neuen SSH-Konfiguration lautet daher ...

    Code
    sudo /etc/init.d/ssh reload

    Vielleicht noch als Anregung falls das Tutorial mal überarbeitet wird. Man kann die RSA-Schlüssel auch direkt mit PuTTYgen erzeugen und dann nur den Public-Key auf den Raspberry kopieren und in die "~/.ssh/authorized_keys" eintragen. Dadurch erspart man sich die Arbeit den Key auf der Konsole zu generieren und dann nochmals den Private-Key mit PuTTYgen "konvertieren" zu müssen. Ob man generell die Schlüsselpaare auf dem Server generieren soll oder doch besser auf den Clients wo letztendlich auch der Private-Key benötigt wird ist wohl Geschmackssache.

    Gruß Georg


  • Hallo zusammen,

    man sollte auch nicht unbedingt den folgenden Befehl verwenden.

    Code
    cp /home/pi/.ssh/id_rsa.pub /home/pi/.ssh/authorized_keys

    Hat man bereits andere Schlüssel hinterlegt, wird "cp" nachfrage ob es die Datei überschreiben soll. Bestätigt man dies, sind die anderen Schlüssel weg. Lehnt man das Überschreiben ab, wird der Schlüssel folglich nicht funktioniert. Daher sollte man neue öffentliche Schlüssel immer an die Datei anfügen.

    genau das ist mir passiert
    hatte schon einen Schlüssel und habe gemacht, was hier steht nun komme ich nicht mehr rein und habe auch keine Tastatur, die ich anschließen könnte zur Verfügung...

  • Hallo abcdacbd,

    Quote

    hatte schon einen Schlüssel und habe gemacht, was hier steht nun komme ich nicht mehr rein und habe auch keine Tastatur, die ich anschließen könnte zur Verfügung...

    Funktioniert denn der neue Schlüssel nicht?
    Wenn du ein zweites Linux-System zur Verfügung hast, kannst du die SD-Karte dort mounten und die "/home/pi/.ssh/authorized_keys" manuell bearbeiten. Im Grunde musst du nur deinen zweiten Schlüssel wieder einfügen.

    Gruß Georg


  • Hallo abcdacbd,


    Funktioniert denn der neue Schlüssel nicht?
    Wenn du ein zweites Linux-System zur Verfügung hast, kannst du die SD-Karte dort mounten und die "/home/pi/.ssh/authorized_keys" manuell bearbeiten. Im Grunde musst du nur deinen zweiten Schlüssel wieder einfügen.

    Gruß Georg

    Nein, der neue Schlüssel funktionierte auch nicht.
    Ich konnte mich nicht einloggen, weil ich ein neues Terminalfenster geöffnet hatte um zu gucken, ob es funktioniert.
    Nach einer Stunde habe ich aber gemerkt, dass ich im anderen Terminalfenster noch eingeloggt war und es nochmal "reparieren" konnte.

  • Hallo,
    die Bilder 1 und 2 sind auch "falsch"; dort müßte im Eingabefeld unten rechts nicht '1024' sondern '4096' eingetragen sein, da der Schlüssel mit 4096bit generiert worden ist ...

    so long
    Perlchamp

    --- wer lesen kann, ist klar im Vorteil ---

    --- man sollte keine Dummheit zweimal begehen, die Auswahl ist schließlich groß genug ---

    --- der Fortschritt der Menschheit ist das Werk der Unzufriedenen ---

    --- Freude entsteht aus Mangel an Information ---

    --- Scheiße ist, wenn der Furz etwas wiegt ---


  • Hallo zusammen,

    man sollte auch nicht unbedingt den folgenden Befehl verwenden.

    Code
    cp /home/pi/.ssh/id_rsa.pub /home/pi/.ssh/authorized_keys

    Hat man bereits andere Schlüssel hinterlegt, wird "cp" nachfrage ob es die Datei überschreiben soll. Bestätigt man dies, sind die anderen Schlüssel weg. Lehnt man das Überschreiben ab, wird der Schlüssel folglich nicht funktioniert.

    Das Glück hat man aber auch nur, wenn z.B. in der .bashrc (bzw. dem rc file der jeweiligen login shell) das alias

    Code
    alias cp='cp -i'


    gesetzt ist.
    Ansonsten bekommt der Aufrufer des cp Befehls das Überschreiben nicht mal mit.

    Quote


    Daher sollte man neue öffentliche Schlüssel immer an die Datei anfügen.

    Code
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

    Ehrlich gesagt, erschliesst sich mir der Sinn nicht ganz, warum man seinen public ssh rsa key in die eigene authorized_keys einfügen sollte.
    Der key gehört in die authorized_keys files auf den remote hosts, wo ich mich von diesem aus per ssh einloggen möchte.

    Aktuelle Versionen des OpenSSH Clients haben ausserdem das ssh-copy-id Kommando,
    womit die Verteilung von public keys auch für Anfänger ganz leicht von der Hand geht
    und das, darüber hinaus, auch noch Sorge dafür trägt, dass ein authorized_keys file mit den richtigen permissions angelegt wird,
    sollte es noch nicht existieren bzw. bei Existenz ganz von selbst keys daran anhängt, ohne etwas zu überschreiben.

    Die richtigen ownerships und perms der $HOME und .ssh dirs sowie von Files darin sind essentiell,
    sonst verweigert der entfernte sshd die Beachtung derselben und verweigert den login
    (Zumindest, wenn er mit StrictModes yes gestartet worden ist,
    was er auf jeden Fall sollte und auch der Default Einstellug entspricht.)


    Gruß
    Ralph

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!