SSH Schlüssel zur Authentifizierung

Für eine sichere SSH Verbindung auf ein Zielsystem gibt es mehrere Möglichkeiten. Im letzten Beitrag habe ich erklärt, wie der Zugriff mittels „Zwei Faktor Authentifizierung“ und dem „Google Authenticator“ funktioniert. Klick Ein weiterer Weg der „Zwei Faktor Authentifizierung“ ist der Zugriff mit SSH Schlüsseln (SSH Keys) in Kombination mit einer Passphrase. Diese schützt den Schlüssel bei Verlust und fügt einen zweiten Faktor hinzu. Somit muss etwas besessen (der private Schlüssel) und gewusst (die Passphrase) werden. Gerade auf Systemen die per SSH über das Internet erreichbar sind, ist es wichtig, den SSH Zugang abzusichern. Eine weitere Alternative wäre es, den Zugriff über SSH nur über das interne Netzwerk oder einen VPN Tunnel zu erlauben.


Das benötigte Schlüsselpaar kann über ein Terminal erzeugt werden. Mit folgendem Befehl wird ein 4.096 Bit starkes RSA Schlüsselpaar erzeugt. Nur der erzeugte öffentliche SSH Schlüssel wird später auf den Server übertragen, der per SSH erreichbar sein soll.

ssh-keygen -b 4096

Der Speicherort sollte so gelassen werden, wie er ist. „~/.ssh“ ist das Standardverzeichnis für die Schlüssel. Bei der Passphrase ist ein sehr starkes Passwort ratsam. Dies kann später in einem Passwortsafe wie KeePass gespeichert werden. Bei Verwendung des Schlüssels wird die Passphrase abgefragt.

SSH Schlüssel ssh-keygen

Der private Schlüssel „~/.ssh/id_rsa“ sollte als Backup zusätzlich auf einem verschlüsselten Bereich abgelegt werden. Windows User können den Vorgang natürlich auch direkt auf dem Raspberry Pi oder Banana Pi durchführen. Im Nachgang muss dann nur der private Schlüssel per „WinSCP“ Klick auf den administrativen Client verschoben werden. Nur der öffentliche Schlüssel darf auf dem Server liegen. Nachdem das Schlüsselpaar erzeugt wurde, muss der öffentliche Schlüssel auf das Zielsystem (Raspberry Pi, Banana Pi, Server…) kopiert und als „Authorized Key“ eingetragen werden. Dies kann mit dem Tool „ssh-copy-id“ geschehen.

ssh-copy-id -i ~/.ssh/id_rsa.pub foo@192.168.1.100

Der Benutzer „foo“ sowie die IP Adresse „192.168.1.100“ muss an das eigene System angepasst werden. Das Ergebnis sollte wie folgt aussehen.

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
foo@192.168.1.100's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'foo@192.168.1.100'"
and check to make sure that only the key(s) you wanted were added.

Hat der Import funktioniert, müssen die Berechtigungen noch sauber gesetzt werden.

chmod 600 ~/.ssh/authorized_keys

Sollte der Schlüssel direkt auf dem System erzeugt worden sein, kann er optional nach dem Import in die „authorized_keys“ gelöscht werden.

rm ~/id_rsa.pub

Wenn es gewünscht ist, zukünftige Anmeldungen ausschließlich über die generierten SSH Schlüssel durchzuführen, muss die SSH Konfiguration noch angepasst werden.

sudo nano /etc/ssh/sshd_config

Folgende Einträge müssen so angepasst werden, damit sie wie im folgenden Beispiel aussehen.

PasswordAuthentication no
RSAAuthentication yes
PubkeyAuthentication yes

Die durchgeführten Änderungen werden aktiviert, indem die Konfiguration neu eingelesen wird.

sudo systemctl reload sshd.service

Sobald jetzt eine SSH Sitzung neu aufgebaut wird, muss die Passphrase des privaten Schlüssels eingegeben werden, damit der Zugriff erlaubt wird. Somit ist nur noch die Kombination aus Schlüssel und Passphrase zum Anmelden erlaubt. Die Passphrase kann aus KeePass per „Auto-Type“ übernommen werden. Falls weitere Möglichkeiten zum Umgang mit der Passphrase gewünscht sind, einfach einen Kommentar hinterlassen. Ich werde dann einen entsprechenden Beitrag dazu verfassen.