SSH Verbindung mittels Zertifikat

27. Oktober 2020

Passwörter sind heutzutage, aus div. Gründen, nicht mehr sonderlich beliebt. Bei der Kommunikation mit Servern über SSH wird daher oft auf „Zertifikat basierte Authentifizierung“ gesetzt. Nachfolgend ein Beispiel, wie dies mit einem OpenSSH zu bewerkstelligen ist.

Auf der Server im Verzeichnis /etc/ssh sollte die Datei sshd_config liegen. In dieser sind die Einstellungen für den SSH-Server hinterlegt. Hier muss der Schalter „PubkeyAuthentication“ auf yes gesetzt sein.

Falls dies geändert wurde, den SSH anschließend sicherheitshalber neu starten (unter Alpine):

service sshd restart

Am Client muss ein Public/Private Schlüsselpaar erstellt werden. Dies wird mit dem Befehl „ssh-keygen“ gemacht. Dieses wird standardmäßig in den Ordner „.ssh“ des Benutzers gespeichert. „ssh-keygen“ erstellt eine Datei mit Endung „.pub“, sprich den öffentlichen Teil und eine Datei ohne Endung, also der private Teil. Das Zertifikat kann, wenn gewünscht, mit einem Passwort gesichert werden.

ssh-keygen -o -a 100 -t ed25519 -f ~/.ssh/name_der_datei -c "kommentar"
ssh-copy-id $BENUTZER@$IP_DES_SERVERS

Zu den Bedeutungen der einzelnen Parameter:

  • -o: Verwendung des neuen OpenSSH Formates, anstatt des PEM-Formates. Dies hat eine höhere Sicherheit
  • -a 100: Iterationszahl für KDF. Je höher, desto länger dauert die Passphrase-Überprüfung und desto mühsamer ist das Brute-Forcing.
  • -f: Wo soll das private/public Schlüsselpaar gespeichert werden.
  • -t ed25519: Typ des zu erstellenden Keys. ed25519 ist der neue defacto Standard. Durch diese Angabe wird automatisch das OpenSSH-Format verwendet.

Anschließend kann mit „ssh-copy-id“ der öffentliche Schlüssel auf dem Server kopiert werden.

Alternativ (bspw. wenn „ssh-copy-id“ nicht zur Verfügung steht) dazu kann dies auch manuell gemacht werden. Hierfür muss auf dem Server im Homeverzeichnis des Users ebenfalls ein Ordner „.ssh“ erstellt werden. In diesem Ordner benötigen wir eine Datei „authorized_keys“. In diese Datei wird der Inhalt der öffentlichen Datei hineinkopiert. Falls bereits Schlüssel vorhanden sind, wird der neue einfach in einer neuen Zeile eingefügt.

Anschließend kann eine SSH-Sitzung einfach mittel Hilfe des privaten Schlüssels gestartet werden:

ssh -i ~/.ssh/my_key [email protected]