# SSH-CA – Erinnerungszettel ## Grundidee Ich verwende **OpenSSH-Zertifikate** anstelle von dauerhaft hinterlegten Public Keys auf meinen Servern. Der **private CA-Schlüssel** befindet sich ausschließlich auf der **CA-VM**. Alle Server kennen lediglich den **öffentlichen CA-Schlüssel** (`ca_key.pub`) und vertrauen damit allen von meiner CA ausgestellten Zertifikaten. Dadurch muss ich **keine `authorized_keys` mehr pflegen**. --- # Komponenten ## CA-VM Enthält: * privaten CA-Key (`ca_key`) * öffentlichen CA-Key (`ca_key.pub`) * `remote_sign.sh` Aufgabe: * Zertifiziert Public Keys. --- ## Client Enthält: * `login.sh` * `certify.sh` * `~/.ssh/id_ca` (Anmeldung an der CA) * Logging * `gum` --- ## Zielserver Benötigen nur: ``` TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem ``` sowie ``` /etc/ssh/trusted-user-ca-keys.pem ``` mit dem Inhalt von ``` ca_key.pub ``` --- # Normaler Login Einfach ```bash ./login.sh ``` Das Skript 1. erzeugt einen temporären Schlüssel, 2. sendet den Public Key zur CA, 3. lässt ihn signieren, 4. holt das Zertifikat zurück, 5. baut die SSH-Verbindung auf. --- # Vorhandenen Schlüssel signieren ```bash ./certify.sh ``` Danach * Public Key auswählen * Benutzer (Principals) auswählen * Gültigkeit auswählen Das Zertifikat wird automatisch erzeugt und neben dem Schlüssel gespeichert. Prüfen: ```bash ssh-keygen -L -f ~/.ssh/-cert.pub ``` --- # ToDo: Neues Gerät hinzufügen ## 1. SSH installieren Falls nötig. --- ## 2. Öffentlichen CA-Schlüssel kopieren ``` ca_key.pub ``` nach ``` /etc/ssh/trusted-user-ca-keys.pem ``` --- ## 3. SSH konfigurieren Falls vorhanden: ``` /etc/ssh/sshd_config.d/ca.conf ``` Inhalt: ``` TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem ``` Alternativ den Eintrag direkt in die ``` /etc/ssh/sshd_config ``` aufnehmen. --- ## 4. SSH neu laden ```bash sudo systemctl restart ssh ``` oder ```bash sudo systemctl restart sshd ``` --- ## 5. Konfiguration prüfen ```bash sudo sshd -t ``` und ```bash sudo sshd -T | grep trustedusercakeys ``` --- ## 6. Testlogin Mit ```bash ./login.sh ``` --- # ToDo: Schlüssel per Hand signieren ## Public Key hochladen ```bash scp -i ~/.ssh/id_ca ~/.ssh/id_ed25519.pub alf@:/tmp/ ``` --- ## Signieren ```bash ssh -i ~/.ssh/id_ca alf@ ``` ```bash /home/alf/remote_sign.sh /tmp/id_ed25519.pub alf 3600 ``` Mehrere Benutzer: ```bash /home/alf/remote_sign.sh /tmp/id_ed25519.pub alf,root,oberkoetter 3600 ``` --- ## Zertifikat zurückholen ```bash scp -i ~/.ssh/id_ca \ alf@:/tmp/id_ed25519-cert.pub \ ~/.ssh/ ``` --- ## Zertifikat prüfen ```bash ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub ``` --- # Nützliche Befehle ## Zertifikat anzeigen ```bash ssh-keygen -L -f ``` --- ## SSH-Konfiguration prüfen ```bash sudo sshd -t ``` --- ## Effektive SSH-Konfiguration ```bash sudo sshd -T ``` --- ## CA-Eintrag kontrollieren ```bash sudo sshd -T | grep trustedusercakeys ``` --- # Wichtig ✔ Der **private CA-Key** verlässt niemals die CA-VM. ✔ Auf den Servern liegt ausschließlich der **öffentliche CA-Key**. ✔ Zertifikate sind nur kurz gültig. ✔ Neue Server benötigen lediglich den öffentlichen CA-Key und den Eintrag `TrustedUserCAKeys`. ✔ Neue Benutzer müssen nicht mehr in `authorized_keys` verteilt werden. --- # Nächste Ausbaustufen * Ansible-Rolle für neue Server * Gemeinsame `config.sh` * Gemeinsame `lib.sh` * Automatische Pflege der `~/.ssh/config` * Optional Weboberfläche für die CA