«

Jul 16

Beitrag drucken

SSH Public Key Authentifizierung

Hallo zusammen,

heute möchte ich euch in diesem Artikel kurz zeigen wie Ihr unter Windows und Mac OSX / Linux eine SSH Verbindung zu einem Server mit Hilfe der Public Key Authentifizierung durchführen könnt. Dieser Post geht nicht auf die Details und die Theorie hinter der “Public Key Verschlüsselung” ein, es Handet sich um eine einfache Praktisch orientiertes Tutorial.

Wieso nicht einfach ein Passwort verwenden?
Diese Frage könnte sich der ein oder ander unter euch sich sicherlich stellen und ich möchte an dieser Stelle direkt grob auf die Vorteile der Public Key Authentifizierung eingehen. Auch wenn das übermitteln des Passwortes über SSH “verschlüsselt” ist, birgt es ein Sicherheitsrisiko. Dabei ist es egal wie sicher  (rund 10 zeichen) und zufällig das Passwort ist, durch einen Brut-force Angriff ist jedes Passwort zu knacken.

Standardgemäß werdet Ihr beim Einloggen auf einen Server (in meinem Fall ein Debian Server) nach einem Usernamen und einem Passwort gefragt. Dieses Passwort ist in der Regel von vielen Hobby Admins relativ kurz und einfach gewählt. Ein Passwort welches sich der normalsterbliche Mensch einfach merken kann. Denn wer möchte sich schon täglich mehrmals mit einem 10 stelligen Passwort auf seinem Server Einloggen.

Was ist nun der Vorteil der Public Key Authentifizierung?
Die Vorteile zeigen sich in zwei Bereichen, für den cleveren Admin ist diese Methode sehr ansprechend da man sich keine, ja wirklich keine Passwörter mehr merken muss und das nicht nur auf einem Server sondern ohne großen Aufwand auf allen Servern zu denen Ihr Zugriff habt. Zum anderen verringert dieses Verfahren die Wahrscheilichkeit  das euer server schnell durch einen Brutforce Angriff auf euer Passwort gekapert werden kann.

Theorie ist schön, aber gib mir Praxis!
Okay, okay, hier kommt Praxis, egal auf welchem System Ihr arbeitet ihr benötigt immer einen SSH Client (Putty, openSSH) und einen “Key-Generator” (openSSH mit ssh-generate, PuTTYgen). Client seitig trenne ich nun die Vorgehensweisen, jenachdem welches Betriebssystem Ihr verwendet. Eine Anleitung zur Erstellung unter Windows wird folgen.

Anleitung für MacOSX / Linux
An dieser Stelle werde ich kurz Schritt für Schritt erklären wie Ihr die Public key Authentifizierung auf dem Mac oder einer Linux box zum laufen bringt. MacOSX hat von Natur aus openSSH im System eingebunden, sollte das nicht der fall sein müsst ihr euch selbst eine OpenSSH implementierung installieren. OpenSSH gibt es an dieser Stelle auch für Linux, aus diesem Grund habe ich an dieser Stelle MacOSX und Linux zusammengefasst.

  1. Erstelle einen Public und Private Key

    ssh-keygen -t rsa -b 2048

    Ihr könnt an dieser stelle auch einen DSA Key erstellen lassen, was ihr verwendet ist relativ egal. Meines Wissens nach benötigt die DSA Implementierung einen guten Zufallszahlengenerator um sicher zu sein. Zur Authentifizierung macht es in meinen Augen keinen Unterschied ob man RSA oder DSA Verwendet. Sollte ein Leser hierzu genauere Informationen haben bitte ich Ihn mir diese mitzuteilen.

    Mit -b wird die Schlüssellänge bestimmt, in diesem Beispiel wird ein RSA Schlüssel der Länge 2048 Bit erstellt. Nach der MAN-Page muss ein DSA Key 1024Bit Lang sein.

  2. Folgt nun einfach den EIngabe auffoderungen. An einer Stelle werdet ihr nach einem Passwort gefragt, diese Passwort wird genutzt um euren Key zu schützen. Sollte also jemand an euren Key kommen würde er immernoch das Passwort benötigen um ihn nutzen zu können. Daher empfiehlt es sich fast immer ein Passwort zu verwenden. Hier eine Biespielausgabe von ssh-keygen:
    ssh-keygen -t dsa
    Generating public/private dsa key pair.
    Enter file in which to save the key (/Users/USER/.ssh/id_dsa/): TEST_P
    Enter passphrase (empty for no passphrase): 
    Enter same passphrase again: 
    Your identification has been saved in TEST_P.
    Your public key has been saved in TEST_P.pub.
    The key fingerprint is:
    32:33:a6:6e:04:7b:c9:b9: test@localhost.local
    The key's randomart image is:

    WICHTIG, jeder der euren Private Key in die Finger bekommt ist in der Lage eure “Identität” zu stehlen. Also lasst diese Datei niemals aus den Augen und gebt gut auf sie acht.

  3. Als nächstes muss euer Server euren Public Key kennen. Dazu kopiert den Inhalt von eurem Public key in unserem fall TEST_P.pub in die auth datei des User an dem ihr euch mit eurem Key anmelden wollt. Ihr müsst euren Public Key bei jedem user hinterlegen bei dem ihr euch mit dem Key authentifizieren wollt! Wie Ihr das anstellt bleibt euch überlassen, ich gebe euch aber fix eine schnelle Anleitung wie Ihr das ganze mit dem terminal regeln könnt. Kopiere den Key per scp in das Homeverzeichnis vom User auf deinen Server
    scp /Users/USER/.ssh/id_dsa/TEST_P.pub user@deinserver.com:~

    Nun baut wie gewohnt eine Verbindung per SSH zu eurem Server auf und verschiebt euren Key an den richtigen platz.

    mkdir ~/.ssh       #Wenn Verzeichnis nicht existiert
    chmod 700 ~/.ssh
    cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
    rm ~/id_rsa.pub

    Diesen Schritt könnt Ihr nun mit jedem Key wiederholen der sich auf diesem User Authentifizieren können soll

  4. Damit euer Key nun Automatisch beim Verbinden zu einem Server an diesen weitergeleitet wird könnt ihr den SSH-Agent (Ab OSX 10.5 standard mäßig dabei, ansonsten die OpenSSH Implemtierung installieren) nutzen. Dieser Agent Chached nun eure Private Keys und macht euch das Leben beim öffnen einer ssh Verbindung wesentlich einfacher, vor allem dann wenn ihr ein Passwort für eure Keys verwendet. Denn so müsst ihr das Passwort für den Key nichtmehr für jede Authentifizierung angeben.
    ssh-add /Users/USER/.ssh/id_dsa/TEST_P 
    Need passphrase for /Users/USER/.ssh/id_dsa/TEST_P luser@example.com).
    Enter passphrase:

Zu guter letzt kann es sein, dass Ihr Eure SSH Konfiguration auf dem Server noch anpassen wollt oder müsst. Dazu kann es nötig sein die PublicKeyAuthentifizierung expliziet zu aktivieren. Dazu öffnet Ihr  die sshd_config file auf eurem Server:

nano /etc/ssh/sshd_config

Dort nehmt ihr folgende Einstellungen vor:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      %h/.ssh/authorized_keys

Nach einem neustart des SSHD könnt ihr euch nun mit eurem Public Key auf dem Server Authentifizieren.

/etc/init.d/ssh restart

Nachdem Ihr die Authentifzierung erfolgreich getestet habt solltet ihr die normale Passwort Authentifikation auch noch auf eurem Server unterbinden. Dies macht ihr mit folgenden einträge in der sshd_config:

PermitRootLogin		no
PasswordAuthentication	no
UsePAM			no

Über den Autor

Andreas

Fortgeschrittener Informatik Student mit der Spezialisierung auf Digitale Medien.

Permanentlink zu diesem Beitrag: http://blackdays.de/2013/07/ssh-public-key-authentifizierung/

2 Pings

  1. HowTo: ssh Root login sperren » BlackDays

    [...] euch diese HowTo interessiert hat, könnte euch auch mein Beitrag zur Public Key Authentification interessieren. Damit könnt Ihr euren Server noch besser vor angriffen [...]

  2. HowTo: Server absichern » BlackDays

    [...] Public Key Authentifikation und Passwort Login verbieten [...]