3.8 KiB
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.shcertify.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
./login.sh
Das Skript
- erzeugt einen temporären Schlüssel,
- sendet den Public Key zur CA,
- lässt ihn signieren,
- holt das Zertifikat zurück,
- baut die SSH-Verbindung auf.
Vorhandenen Schlüssel signieren
./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:
ssh-keygen -L -f ~/.ssh/<key>-cert.pub
Nutzung mit rclone
Hier ein Beispiel für die Nutzung mit rclone:
[omv2000]
type = sftp
host = 100.87.87.81
user = root
port = 2222
shell_type = unix
md5sum_command = md5sum
sha1sum_command = sha1sum
key_file=/root/id_omv2000
pubkey_file=/root/id_omv2000-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
sudo systemctl restart ssh
oder
sudo systemctl restart sshd
5. Konfiguration prüfen
sudo sshd -t
und
sudo sshd -T | grep trustedusercakeys
6. Testlogin
Mit
./login.sh
ToDo: Schlüssel per Hand signieren
Public Key hochladen
scp -i ~/.ssh/id_ca ~/.ssh/id_ed25519.pub alf@<CA-IP>:/tmp/
Signieren
ssh -i ~/.ssh/id_ca alf@<CA-IP>
/home/alf/remote_sign.sh /tmp/id_ed25519.pub alf 3600
Mehrere Benutzer:
/home/alf/remote_sign.sh /tmp/id_ed25519.pub alf,root,oberkoetter 3600
Zertifikat zurückholen
scp -i ~/.ssh/id_ca \
alf@<CA-IP>:/tmp/id_ed25519-cert.pub \
~/.ssh/
Zertifikat prüfen
ssh-keygen -L -f ~/.ssh/id_ed25519-cert.pub
Nützliche Befehle
Zertifikat anzeigen
ssh-keygen -L -f <zertifikat>
SSH-Konfiguration prüfen
sudo sshd -t
Effektive SSH-Konfiguration
sudo sshd -T
CA-Eintrag kontrollieren
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