SSH Verbindung mittels Zertifikat
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:
sudo systemctl restart sshd
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 RSA-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]
Nachfolgend noch einige Best Practicses in /etc/ssh/sshd_config:
#Root Benutzer darf sich nicht per SSH anmelden
PermitRootLogin no
#Authentifizierung ist nur mittels Zertifikat möglich
PasswordAuthentication no
#Anmeldung von Benutzern ohne Passwort wird verhindert
PermitEmptyPasswords no
#Zugriff nur für bestimmte Benutzer erlauben
AllowUsers benutzername1 benutzername2