Benutzer sollen sich per SSH auf Linux-Servern anmelden können, ohne dass ihre Public Keys manuell auf jedem Server eingetragen werden müssen. Stattdessen signieren sie ihren eigenen Public Key bei einer zentralen SSH Certificate Authority (CA). Die Server akzeptieren dann automatisch alle gültigen, signierten Zertifikate.
OpenSSH unterstützt neben gewöhnlichen Public Keys auch sogenannte SSH-Zertifikate. Diese funktionieren ähnlich wie TLS-Zertifikate:
ssh-keygen -f /etc/ssh/ca_key -C "SSH CA" -t rsa
Erzeugt zwei Dateien:
CA Public Key auf den Server kopieren, z. B. nach /etc/ssh/ca_key.pub.
Dann in /etc/ssh/sshd_config folgenden Eintrag ergänzen:
TrustedUserCAKeys /etc/ssh/ca_key.pub
# Dienst neu starten
systemctl reload sshd
Jeder Benutzer generiert lokal einen eigenen Key:
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "user@example.com"
Der Benutzer sendet seinen Public Key zur Signierung an die CA. Die CA signiert den Key:
ssh-keygen -s /etc/ssh/ca_key \
-I user@example.com \
-n <username> \
~/.ssh/id_ed25519.pub
kurze Gedankenstütze: -I Identifier (frei wählbar, z. B. E-Mail) -n Principal (Benutzername auf dem Zielsystem)
Erzeugt: id_ed25519-cert.pub - die geht wieder zurückzum Benutzer.
ssh -i ~/.ssh/id_ed25519 \
-o CertificateFile=~/.ssh/id_ed25519-cert.pub \
user@zielserver
Oder dauerhaft in ~/.ssh/config:
Host zielserver
HostName server.example.com
User <username>
IdentityFile ~/.ssh/id_ed25519
CertificateFile ~/.ssh/id_ed25519-cert.pub
Warum? Weil es geil ist!
Bei der Signierung wird die Gültigkeit angegeben:
ssh-keygen -s ca_key -I user -n user -V +1h user.pub
Alternativ absolute Zeitspanne:
ssh-keygen -s ca_key -I user -n user -V "20250513T100000:20250513T180000" user.pub
Das wiederum würde sich auch ganz gut eigenen um sich automatisieren zu lassen. Webportal oder CLI für Benutzer, um ein Zertifikat per SSO oder Token zu erhalten