Files
ssh-cert-login/Spickzettel.md
2026-08-28 07:08:03 +00:00

290 lines
3.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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/<key>-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@<CA-IP>:/tmp/
```
---
## Signieren
```bash
ssh -i ~/.ssh/id_ca alf@<CA-IP>
```
```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@<CA-IP>:/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 <zertifikat>
```
---
## 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