Files
sshkeyvault/docs/issues/015-authorized-keys-parser.md
T
florian.wildeandClaude Opus 5.5 19edd20d72 feat(ssh): authorized_keys lesen und verwalteten Block setzen (#015)
Reine Funktionen fuer Dry-Run und Ausrollen. Alles ausserhalb des
Blocks bleibt bytegenau stehen, auch CRLF, BOM und kaputte Zeilen;
der Block entsteht deterministisch aus dem Soll. Ein beschaedigter
Block wird nie automatisch ueberschrieben, weil genau dort fremde
Zeilen verschwinden koennten.

Verwaltete Keys erkennt sshkv am Fingerprint, nicht am Kommentar. Der
Deployment-Key kann nicht aus dem Block fallen (Aussperrschutz).

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

1.5 KiB
Raw Blame History

#015 authorized_keys: Parser und Merge

Status: erledigt Meilenstein: v0.2.0 Labels: backend, test Geschätzt: 3 h Tatsächlich: 0 h 15 min

Ziel

Reine Funktionen zum Lesen und Schreiben von authorized_keys mit verwaltetem Block.

Aufgaben

  • Optionen mit Anführungszeichen
  • CRLF, BOM, Kommentare, Duplikate
  • Block erzeugen/ersetzen, Rest bytegenau
  • Aussperrschutz Deployment-Key

Akzeptanzkriterien

  • Umfangreiche Unit-Tests der Randfälle

Abhängigkeiten

#001

Notizen / Entscheidungen

  • Bytegenau: Zeilen werden an \n getrennt, ein \r bleibt Teil der Zeile; BOM und fehlende letzte Zeilenschaltung bleiben erhalten. Einzige Änderung außerhalb des Blocks: Fehlt der Block und der letzten Zeile die Zeilenschaltung, bekommt sie eine – sonst stünde der Block-Anfang in derselben Zeile.
  • CRLF-Dateien (überwiegend \r\n) bekommen auch im Block CRLF.
  • Beschädigter Block (Anfang ohne Ende, mehrere Blöcke, Ende vor Anfang): nie automatisch schreiben, BlockFehler mit Bitte um Handarbeit.
  • Erkennung am Fingerprint, nicht am Kommentar; der Typ im Blob muss zum Zeilentyp passen.
  • Optionen: Parser wie sshd (Kommas in Anführungszeichen, \"). Für Benutzereingaben strenger: nur bekannte Optionen, keine Steuerzeichen.
  • Aussperrschutz: Ein pflicht-Fingerprint (Deployment-Key), der im Block stand, darf nicht verschwinden.
  • Diff per LCS, für die Anzeige verdichtet (je 2 Zeilen Kontext).