Eine SSH CA für Benutzerschlüssel
Es ist ja “Stand der Technik” für die Anmeldung am SSH Server nicht mehr ein Kennwort zu verwenden sondern SSH Schlüssel. Der Grundgedanke ist das der Server den oder die öffentlichen Schlüssel eines Anwenders in einer bestimmte Datei hat. Meldet sich ein Benutzer an wird dieser öffentliche Schlüssel verwendet um kryptografische Magie walten zu lassen.
Das bedeutet das man die öffentlichen Schlüssel auf den Servern verteilen muss. Bei ein paar Servern mit ein paar Anwendenden geht das noch gut mit Automatisierungen wie Ansible.
Irgendwann skaliert das nicht mehr. Eine Möglichkeit ist es die öffentlichen Schlüssel nicht mehr zu verteilen sondern diese öffentlichen Schlüssel von eine CA signieren zu lassen. Der Server vertraut dann den Zertifikaten die mit der bei Ihm hinterlegten CA signiert worden sind.
Ich habe das für mich auf FreeBSD so realisiert. In grösseren Umgebungen muss das anders aufgebaut werden.
Ein dedizierter Notebook dient als CA Server. Wenn ich einen neuen Schlüssel einrichte muss der öffentliche Teil über einen USB Stick auf den Notebook und wird dort signiert. Ein andere Ansatz war zuerst ein Jail dafür zu verwenden. Das Jail mounted einen allgemein zugänglichen Share und in diesen Share werden die Pubkeys zum Unterschreiben gelegt. Da ich noch einen alten X201 hier habe habe ich mich zu dem “offline” Ansatz entschlossen.
User Anmeldungen.
Zuerst wird eine SSH CA für User erstellt. Es wird allgemein empfohlen verschiedene CAs für User und Server zu verwenden.
ssh-keygen -t ed25519 -f ssh_user_ca
Der öffentliche Key muss auf den Servern verteilt werden und mit dem notwendigen Pubkey Algorithmus in die SSHD Konfiguration übernommen werden. Ich mache das bei mir mit Ansible.
vi /etc/ssh/sshd_config
TrustedUserCAKeys /etc/ssh/ssh_user_ca.pub
PubkeyAcceptedAlgorithms ssh-ed25519-cert-v01@openssh.com,ssh-ed25519
sudo service sshd restart
Auf dem Client erstelle ich ein neues Schlüsselpaar. Ich könnte auch ein altes nehmen aber wenn ich schon mal dabei bin …
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_hbauer_2026
Den öffentlichen Teil muss ich dann auf meinem “CA Server” signieren.
ssh-keygen \
-s ssh_user_ca \
-I Hagen.Bauer@caserio.de \
-n hbauer \
-V +150w \
id_hbauer_2026.pub
Enter passphrase for "ssh_user_ca":
Signed user key id_hbauer_2026-cert.pub: id "Hagen.Bauer@caserio.de" serial 0 for hbauer valid from 2025-12-23T15:30:00 to 2028-11-21T15:31:47
Man erhält damit eine Dateien namens id_hbauer_2026-cert.pub die man “irgendwie” wieder zurück auf den Client bekommen muss und neben den Pubkey legen sollte. Dann kann man sich mit dem neuen Key an dem Server anmelden ohne vorher den öffentlichen Key bei dem Nutzer in die authorizedkeys eingetragen zu haben.
Später werde ich mir dann man den Prozess der Revocation Liste ansehen.