SSH Public Key Authentifizierung

Die Secure Shell SSH ist das Standardwerkzeug zur Fernadministration von Servern. Eine Public Key Authentifizierung verbessert die Sicherheit des Servers, da durch eine Bruteforce Attacke oder auch durch Ausspähen des Passworts, ohne Besitz des Private Keys, kein Login möglich ist. In der aktuellen Debian-Distribution wird der Login vom root-User per Konfiguration verboten. Per Public Key Authentifizierung lässt sich auch ein sicherer Login für den root-User einrichten.

Die Anleitung zeigt das Einrichten einer Public Key Authentifizierung für den root-User und einen User test. Eine Anleitung zur Installation von Raspbian gibt es hier.

Erstellen der Schlüsselpaare

Eine einfache Methode zur Generierung des Schlüsselpaars bietet das Programm PuTTYgen welches nach der Installation von PuTTY zur Verfügung steht.

Nach dem Öffnen stellen wir bei Number of bits in a generated key: einen Wert von 4096 ein und drücken auf Generate.

PuTTY-Key-Generator

Jetzt bewegen wir die Maus so lange wild über das graue Feld bis der grüne Balken voll ist und das Programm mit der Erstellung der Schlüssel beginnt. Als nächstes sehen wir das Fenster mit dem Public Key und zusätzlichen Informationen wie dem Key fingerprint und dem Key comment.

Der Key comment lässt sich Ändern und wird später bei der Abfrage der Passphrase angezeigt. Man vergibt hier am besten die Namen des welche wir auch für die Schlüssel verwenden werden, damit lassen sich die Schlüssel später auch leichter identifizieren.

Wir vergeben nun eine Key passphrase um den Private Key zusätzlich zu schützen.
Nun drücken auf Save private key, vergeben einen Namen z.B. root_rsa und speichern den Private Key in ein Verzeichniss unserer Wahl. Die Datei bekommt automatisch die Endung .ppk, in unseren Fall heißt sie dann root_rsa.ppk.

Als nächstes erstellen wir eine Datei welche den Public Key enthalten wird und geben ihr den Namen authorized_keys.root.
Wir Markieren und Kopieren (STRG+C) den Inhalt aus dem Fenster Public key for pasting into OpenSSH authorized_keys file: und fügen Ihn in die Datei ein (STRG+V).

Wir Wiederholen die Schritte um ein Schlüsselpaar für den Testuser herzustellen, jedoch verwenden wir die Namen test_rsa.ppk und authorized_keys.test.

Als Ergebniss sollten wir vier Dateien haben: root_rsa.ppk, authorized_keys.root, test_rsa.ppk und authorized_keys.test.

Die *.pkk-Dateien sind die Private Keys, ohne die für den User kein Login per SSH möglich ist.

Den Private Key NIEMALS auf den Server ablegen und immer sicher Verwahren!

Installieren der Public Keys

Um die Public Key Authentifizierung Aktivieren zu können benötigen wir die Public Keys auf unserem Server.

Wir loggen uns als root-User auf den Server und Erstellen im Stammverzeichnis des jeweiligen Benutzers ein neues Verzeichnis mit den Namen .ssh.

Für den root-User im root-Verzeichnis:

root@rpitest:~# mkdir .ssh

Für den User test in dessen Stamm-Verzeichnis:

root@rpitest:~# mkdir /home/test/.ssh

Wir verbinden uns per WinSCP auf den Server und kopieren die Dateien authorized_keys.root und authorized_keys.test in das .ssh-Verzeichnis des jeweiligen Benutzers.

Wir nennen nun die beiden kopierten Dateien in authorized_keys um:

root@rpitest:~# mv .ssh/authorized_keys.root .ssh/authorized_keys
root@rpitest:~# mv /home/test/.ssh/authorized_keys.test /home/test/.ssh/authorized_keys

Dann setzen wir auf die .ssh-Verzeichnisse ausschließliche Lese-, Schreib-, Ausführ-, und Eigentumsrechte für den Benutzer und dessen Gruppe.
Auf den Inhalt vom .ssh-Verzeichnis setzen wir ausschließliche Lese-, Schreib-, und Eigentumsrechte für den Benutzer und dessen Gruppe.

root@rpitest:~# chmod 700 .ssh
root@rpitest:~# chmod 600 .ssh/*
root@rpitest:~# chmod 700 /home/test/.ssh
root@rpitest:~# chmod 600 /home/test/.ssh/*

Jetzt prüfen wir den Verzeichnisbestand die Richtigkeit der Rechte.

Für den root-User:

root@rpitest:~# ls -al .ssh/
total 16
drwx------  2 root root 4096 Nov 17 15:54 .
drwx------ 23 root root 4096 Nov 17 15:54 ..
-rw-------  1 root root  737 Nov 17 15:54 authorized_keys

Für den User test:

root@rpitest:~# ls -al /home/test/.ssh/
total 16
drwx------ 2 test test 4096 Nov 17 16:01 .
drwxr-xr-x 3 test test 4096 Nov 17 15:10 ..
-rw------- 1 test test  737 Nov 17 16:01 authorized_keys

Konfiguration des SSH-Servers

Die Konfigurationsdatei sshd_conf vom SSH-Server liegt im Verzeichnis /etc/ssh/.

Wir öffnen die Datei mit einem Editor und ändern folgende Einträge:

# Authentication:
PermitRootLogin without-password
.
.
AuthorizedKeysFile      %h/.ssh/authorized_keys

# Change to no to disable tunnelled clear text passwords
PasswordAuthentication no

Wir starten den SSH-Server neu

root@rpitest:/etc/ssh# systemctl restart ssh.service

und versuchen uns per SSH-Client zu verbinden, es kommt eine Fehlermeldung:

KiTTY-Fatal-Error

Wir müssen unserem SSH-Client nun Mitteilen wo er den Private Key des anzumeldeten Benutzers finden kann

und dann bei Session speichern:

Beim nächsten Login sollte es dann so aussehen:

Using username "root".
Authenticating with public key "root_rsa"
Passphrase for key "root_rsa":

Damit ist die Installation abgeschlossen.