Files
sshkeyvault/CHANGELOG.md
T
florian.wildeandClaude Opus 5.5 18f72f9d03 chore(release): 0.4.0 - Phase 4 abgeschlossen
Abgleich und Drift-Erkennung, Import, Rotation, Widerruf und
Zuweisungsmatrix. CHANGELOG und DEVLOG nachgetragen.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-12 13:40:32 +02:00

6.7 KiB
Raw Blame History

Changelog

Alle nennenswerten Änderungen an SSHKeyVault werden in dieser Datei dokumentiert.

Das Format basiert auf Keep a Changelog, und dieses Projekt folgt Semantic Versioning.

[Unveröffentlicht]

Hinzugefügt

Geändert

Behoben

Sicherheit

[0.4.0] – 2026-10-12

Phase 4: Abgleich, Import, Rotation, Widerruf und Zuweisungsmatrix.

Hinzugefügt

  • Abgleich je Host und nächtlich per Zeitplan (SSHKV_SYNC_CRON): erkennt fehlende Schlüssel, von Hand geänderte Blöcke, unbekannte Schlüssel, falsche Rechte, beschädigte Blöcke und veränderte Private Keys; Befunde öffnen und schließen sich selbst. Hostseite mit Abweichungen und Ist-Zustand je Benutzer, „Jetzt abgleichen“ auch auf der Übersicht (#021)
  • Unbekannte Schlüssel übernehmen: als bekannt aufnehmen oder per Dry-Run in den verwalteten Block holen (#022)
  • Geführte Rotation: neuer Schlüssel an allen Stellen, Verbindungstests, erst dann wird der alte entfernt; jederzeit fortsetzbar, Rotationskette auf der Schlüsselseite (#023)
  • Widerruf mit einem Klick und Massenwiderruf: Public Key, Private Key, config- und known_hosts-Einträge entfernen, optional Zielkonten; Zwischenzustand, solange ein Host nicht erreicht wird; abgelaufene Schlüssel mit Hinweis (#024)
  • Zuweisungsmatrix Schlüssel × Host mit Filtern, Zell-Dialog zum Zuweisen und CSV-Export (#025)
  • Skript zum Abgleich der Issues nach Gitea (pnpm issues:sync, #030 – Zugang steht noch aus)

Sicherheit

  • Abgleich liest Dateien als der jeweilige Benutzer und ändert auf dem Host nichts
  • Zeilen außerhalb des verwalteten Blocks entfernt sshkv nur bei ausdrücklich übernommenen Schlüsseln
  • Ein Widerruf gilt erst als abgeschlossen, wenn der Schlüssel wirklich überall entfernt ist; eine Rotation entfernt den alten Schlüssel erst nach erfolgreichen Verbindungstests
  • CSV-Export entschärft Werte, die eine Tabellenkalkulation als Formel lesen würde

[0.3.0] – 2026-10-12

Phase 3: Host-zu-Host – Private Keys, Zielkonten, Vorlagen und Assistent.

Hinzugefügt

  • Host-zu-Host-Assistent: Vorlage wählen, Host A und B, Zielbenutzer, Einschränkungen und ~/.ssh/config-Alias, Fingerprint von B bestätigen, Dry-Run, ausrollen, Verbindung testen – in einem Durchgang (#020)
  • Zielbenutzer (z. B. deploy) auf dem Ziel anlegen, mit sudoers-Datei für bestimmte Befehle oder vollen Zugriff; Vorschau vor dem Anlegen, Prüfung mit visudo -c (#018)
  • Vorlagen verwalten: eingebaute „Deployment-Zugang“, „Backup-Zugang“, „Admin-Zugang Person“, eigene anlegen und archivieren, Live-Vorschau der Platzhalter und des sudoers-Inhalts (#019)
  • Übersicht verlinkt den Assistenten

Sicherheit

  • Neue Benutzer mit sudo nur durch Admins mit frischer Bestätigung
  • sshkv überschreibt keine fremde sudoers-Datei und fasst Systemkonten nicht an; ein Widerruf löscht nur Benutzer, die sshkv selbst angelegt hat
  • Platzhalter-Werte können keine zusätzlichen authorized_keys-Optionen einschleusen

[0.2.0] – 2026-10-12

Phase 2: Schlüssel, Personen und Ausrollen von Public Keys – dazu vorgezogen aus Phase 3 das Ausrollen von Private Keys.

Hinzugefügt

  • Schlüssel erzeugen (ed25519, RSA-4096, optional mit Passphrase), Paar oder Public Key importieren, Public Key exportieren; Liste mit Filter, Detailseite mit Verwendungen (#012)
  • Personen verwalten; Self-Service „Meine Schlüssel“: jeder Benutzer hinterlegt eigene Public Keys, wirksam erst nach Zuweisung (#013)
  • Private Key anzeigen und herunterladen – nur Admin, nur nach erneuter Bestätigung, genau einmal abholbar; Private Key aus SSHKeyVault löschen (#014)
  • authorized_keys-Parser und verwalteter Block: fremde Zeilen bleiben bytegenau, beschädigte Blöcke werden nie überschrieben, Deployment-Key ist vor dem Entfernen geschützt (#015)
  • Public Keys Hosts oder Hostgruppen zuweisen, Dry-Run mit Diff, Ausrollen mit Backup und optimistischer Sperre; Ansicht je Schlüssel und je Host (#016)
  • Private Key auf einen Quell-Host ausrollen, mit verwaltetem Block in ~/.ssh/config und known_hosts (#017)
  • Verbindungstest von Host A nach Host B (#020, Teil)
  • Zielbenutzer anlegen und sudoers pflegen – Grundlage, Oberfläche folgt (#018, Teil)
  • Vorlagen: Platzhalter und Prüfung – Grundlage, Oberfläche folgt (#019, Teil)

Sicherheit

  • Importierte Private Keys reisen nur verschlüsselt im Job; Vorgang, Protokoll und Browser sehen sie nie (Tests)
  • Private-Key-Ziele nimmt der Dry-Run nur für Admins auf
  • Dateien in fremden Home-Verzeichnissen werden als deren Benutzer gelesen und geschrieben (Symlink-Schutz)

[0.1.0] – 2026-10-12

Phase 1: Grundgerüst, Anmeldung, Hosts und Bootstrap.

Hinzugefügt

  • Projektplan mit Architektur, Datenmodell, Sicherheitskonzept und Phasenplan (docs/PLAN.md), Issues für alle fünf Phasen
  • Projektgerüst: Next.js 16, Prisma 7, PostgreSQL 17, pnpm, ESLint/Prettier/Vitest/Playwright, commitlint (#001)
  • Design „Tresor“: Design-Tokens, selbst gehostete Schriften, Logo, Favicon und PWA-Icons, Seitenleiste, Grundkomponenten (#002)
  • Datenmodell für alle Phasen mit Datenbankregeln (CHECK, partielle Indizes, Trigger) und Seed mit Notfall-Admin und eingebauten Vorlagen „Deployment-Zugang“, „Backup-Zugang“, „Admin-Zugang Person“ (#003)
  • Anmeldung per OIDC (authentik) mit Rollen Admin/Operator/Leser aus Gruppen; Notfall-Admin mit Passwort und Pflicht-TOTP; erneute Bestätigung vor kritischen Aktionen (#004)
  • Revisionssicheres Protokoll: append-only, Hash-Kette, Prüffunktion (#005)
  • OpenSSH-Schlüssel (ed25519, RSA-4096) erzeugen, lesen und schreiben ohne ssh-keygen, kompatibel geprüft; Envelope Encryption mit Master-Key; Deployment-Key der Instanz (#006)
  • Worker mit pg-boss und Vorgängen mit Fortschrittsanzeige; Dockerfile und Docker Compose für den Betrieb (#007)
  • Hosts und Hostgruppen anlegen, bearbeiten, archivieren, filtern; Demo-Daten mit SSHKV_SEED_DEMO=1 (#008)
  • Host-Key-Prüfung nach TOFU: abrufen, Fingerprint bestätigen oder ablehnen, strikte Prüfung bei jeder Verbindung, Warnung bei Änderung (#009)
  • Bootstrap neuer Hosts per Einmal-Passwort oder Befehl zum Kopieren, mit Dienstbenutzer sshkv und sudoers; sshd-Hinweise (#010)
  • SSH-Testziele (Debian 13) und Mock-OIDC für Integrations- und E2E-Tests (#011)

Sicherheit

  • Private Keys nur verschlüsselt in der Datenbank; nur der Worker kann sie öffnen – strukturell getestet
  • Ein pg_dump enthält keinen Klartext-Schlüssel (Test)
  • Bootstrap-Passwort wird nirgends gespeichert (Test); Dateien im Home des Zielbenutzers werden als dieser Benutzer geschrieben (Symlink-Test gegen /etc/shadow)
  • Content-Security-Policy mit Nonce, Sicherheits-Kopfzeilen, Rate-Limit für den Notfallzugang