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:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user