chore(release): 0.2.0 - Phase 2 abgeschlossen

Schluessel, Personen, Private Key anzeigen, authorized_keys-Parser und
Ausrollen von Public Keys; vorgezogen das Ausrollen von Private Keys
mit ssh-config und known_hosts. CHANGELOG und DEVLOG nachgetragen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 11:05:57 +02:00
co-authored by Claude Opus 5.5
parent 1dc39671c2
commit 0a58f6ce32
5 changed files with 76 additions and 15 deletions
+12 -6
View File
@@ -1,21 +1,27 @@
# #016 Public Key ausrollen mit Dry-Run und Backup
**Status:** offen
**Status:** erledigt
**Meilenstein:** v0.2.0
**Labels:** backend, ui
**Geschätzt:** 4 h **Tatsächlich:** –
**Geschätzt:** 4 h **Tatsächlich:** 0 h 40 min
## Ziel
Zuweisungen Schlüssel × Host/Gruppe × Benutzer; Dry-Run-Diff, Backup, atomares Schreiben, Rechte.
## Aufgaben
- [ ] Remote-Skript
- [ ] Optimistische Sperre über Datei-Hash
- [ ] Diff-Box im Schlüsseldetail
- [x] Remote-Skript
- [x] Optimistische Sperre über Datei-Hash
- [x] Diff-Box im Schlüsseldetail
## Akzeptanzkriterien
- [ ] Integrationstest Ausrollen/Entfernen
- [x] Integrationstest Ausrollen/Entfernen
## Abhängigkeiten
#015, #010
## Notizen / Entscheidungen
- **Zwei Schritte:** TROCKENLAUF hält je Ziel Diff, Hinweise und die Hashes vorher/nachher fest; AUSROLLEN führt genau diesen Plan aus und bricht je Ziel ab, wenn sich Datei **oder** Soll geändert hat. Ein Trockenlauf gilt 15 Minuten und nur einmal.
- **Auf dem Host** alles als Zielbenutzer (`runuser`), Hash dort erneut geprüft, Sicherung (letzte 5 bleiben), Temp-Datei + `mv`, 0700/0600.
- **Nur gültiges UTF-8** wird bearbeitet, sonst ginge „bytegenau“ verloren.
- **Soll** = direkte und Gruppen-Zuweisungen; der Deployment-Key gehört immer zum Soll des Anmeldebenutzers (Aussperrschutz aus #015).
- Gruppen-Verwendungen: Zustand je Verwendung, Fehlschlag auf einem Host gewinnt. Zustand je Host folgt mit dem Abgleich (#021).
- Oberfläche: Zuweisen auf der Schlüsselseite, Dry-Run je Schlüssel und je Host.
+12 -6
View File
@@ -1,21 +1,27 @@
# #017 Private Key ausrollen und ~/.ssh/config
**Status:** offen
**Status:** erledigt
**Meilenstein:** v0.3.0
**Labels:** backend, ui
**Geschätzt:** 4 h **Tatsächlich:** –
**Geschätzt:** 4 h **Tatsächlich:** 0 h 45 min
## Ziel
Private Key auf Zielhost/-benutzer/-pfad, verwalteter Block in `~/.ssh/config`, `known_hosts`.
## Aufgaben
- [ ] Übertragung nur über stdin
- [ ] Warnung bei Passphrase
- [ ] nur Admin
- [x] Übertragung nur über stdin
- [x] Warnung bei Passphrase
- [x] nur Admin
## Akzeptanzkriterien
- [ ] Integrationstest
- [x] Integrationstest
## Abhängigkeiten
#016
## Notizen / Entscheidungen
- **Dateien je Ziel:** Private Key (0600, keine Sicherungskopie), `.pub` (0644), verwalteter Block **am Anfang** von `~/.ssh/config` (ssh nimmt den ersten Treffer), verwalteter Block in `known_hosts` mit den vertrauten Host-Keys des Ziels unter dem HostName/Port aus der config.
- **Nie fremde Dateien überschreiben:** Liegt am Zielpfad schon etwas anderes, scheitert das Ziel im Trockenlauf.
- **Plan ohne Inhalt:** Der Trockenlauf zeigt beim Private Key nur die Aktion; weder Vorgang noch Protokoll noch Browser sehen den Schlüssel.
- **Nur Admins:** Zuweisen verlangt `privateKeyAusrollen`; der Trockenlauf nimmt Private-Key-Ziele nur für Admins auf.
- **Widerruf:** löschen oder umbenennen (`…sshkv-widerrufen.<Zeit>`), config- und known_hosts-Einträge verschwinden mit.
- Integrationstest: A meldet sich per Alias bei B an (StrictHostKeyChecking=yes). E2E im Browser für den ganzen Kern-Anwendungsfall.