Files
ssh-cert-login/Spickzettel.md
2026-09-15 07:32:18 +00:00

3.8 KiB
Raw Blame History

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

./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

./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