Spickzettel.md hinzugefügt

This commit is contained in:
alf
2026-08-28 07:08:03 +00:00
parent a6920c5a27
commit f3686cf8e8

289
Spickzettel.md Normal file
View File

@ -0,0 +1,289 @@
# 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