Bootstrap, Host-Key-Pruefung und spaeteres Ausrollen brauchen echte sshd-Gegenstellen. Zwei Debian-13-Container (ziel-a, ziel-b) in einem gemeinsamen Netz bilden frische Hosts vor dem Bootstrap nach: root- und Passwort-Login sind absichtlich offen, Host-Keys entstehen erst beim Start, und `hostkeys-tauschen` erlaubt den Test "geaenderter Host-Key wird abgelehnt" ohne Neuerstellen des Containers. Die Testhilfen lesen dieselben Adress-Variablen wie die Compose-Datei und lassen Tests mit Hinweis auf den Startbefehl fehlschlagen, statt sie still zu ueberspringen - ein uebersprungener Integrationstest sieht sonst wie ein bestandener aus. Der Mock-OIDC-Anbieter ersetzt authentik in der Entwicklung (PLAN.md, Entscheidung 7). Bei interaktivem Login uebernimmt er nur Claims aus dem Formular, daher belegt eine eigene Login-Seite email, name und groups vor und laesst die Gruppen frei waehlen. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2.9 KiB
2.9 KiB
#011 Test-SSH-Container und Integrationstests
Status: erledigt Meilenstein: v0.1.0 Labels: test Geschätzt: 2 h Tatsächlich: 0,25 h
Ziel
Debian-Container mit sshd für Integrationstests (Bootstrap, Host-Key, später Ausrollen).
Aufgaben
- Dockerfile
tests/ssh-ziel/(Debian 13, sshd, sudo, Passwort für root/test) - Compose-Datei für Tests, zwei Ziele (für Host-zu-Host)
- Vitest-Projekt
integration - Mock-OIDC-Anbieter für die Entwicklung (
mock-oidcindocker-compose.test.yml) - Hilfen
tests/integration/hilfen/ziele.tsund Rauchtesttests/integration/ziele.test.ts
Akzeptanzkriterien
pnpm test:integrationläuft lokal
Abhängigkeiten
#001
Notizen / Entscheidungen
- Start:
pnpm test:ziele:up(=docker compose -f docker-compose.test.yml up -d --build --wait), Stopp:pnpm test:ziele:down. Projektnamesshkv-test. - Ports nur auf 127.0.0.1:
ziel-a2221,ziel-b2222,mock-oidc8090. Überschreibbar überSSHKV_TEST_ZIEL_A/SSHKV_TEST_ZIEL_B/SSHKV_TEST_OIDC(Formathost:port) – dieselben Variablen lesen Compose (Port-Bindung) und die Testhilfen, damit beide nie auseinanderlaufen. - Testziel (
debian:trixie-slim): root undtest(Gruppesudo) mit Passwortsshkv-test(ENVSSHKV_TEST_ROOT_PASSWORT/SSHKV_TEST_TEST_PASSWORT, wird beim Start perchpasswdgesetzt).PermitRootLogin yesundPasswordAuthentication yesabsichtlich – das Ziel bildet einen Host vor dem Bootstrap nach. - Host-Keys werden nicht ins Image gebacken, sondern beim Start mit
ssh-keygen -Aerzeugt: jeder neu erstellte Container hat eigene Keys.hostkeys-tauschenim Container erzeugt neue Keys, schickt sshd (PID 1) ein SIGHUP und wartet, bisssh-keyscanden neuen Key sieht. - Fingerprint-Vergleich handelt nur
ssh-ed25519aus, sonst könnte der gezeigte Key-Typ wechseln und der Vergleich flattern. - Nicht laufende Ziele lassen die Tests mit Hinweis auf den Startbefehl fehlschlagen
(
zielBereitwartet bis 15 s auf das SSH-Banner) – kein stilles Überspringen. - Beide Ziele bauen ohne gemeinsames
image:-Tag: Mit gemeinsamem Tag bricht der parallele Build mit „already exists“ ab. - Mock-OIDC:
ghcr.io/navikt/mock-oauth2-server:6.0.5(exakt gepinnt). Issuerhttp://127.0.0.1:8090/sshkv– der Mock leitet ihn aus dem Host-Header ab, mitlocalhostentstünde ein anderer Issuer. Client-ID und -Secret werden nicht geprüft. BeiinteractiveLoginübernimmt der Mock nur die Claims aus dem Login-Formular (tokenCallbacksgreifen dann nicht). Deshalb lieferttests/mock-oidc/login.htmleine eigene Login-Seite (loginPagePath), dieemail,email_verified,name,preferred_usernameundgroups: ["sshkv-admins"]vorbelegt; Knöpfe für Admin/Operator/ Reader/ohne Gruppe, das JSON bleibt frei änderbar.