Ports nur auf 127.0.0.1: ziel-a 2221, ziel-b 2222, mock-oidc 8090. Überschreibbar über SSHKV_TEST_ZIEL_A/SSHKV_TEST_ZIEL_B/SSHKV_TEST_OIDC (Format host:port) – dieselben
Variablen lesen Compose (Port-Bindung) und die Testhilfen, damit beide nie auseinanderlaufen.
Testziel (debian:trixie-slim): root und test (Gruppe sudo) mit Passwort sshkv-test (ENV SSHKV_TEST_ROOT_PASSWORT/SSHKV_TEST_TEST_PASSWORT, wird beim Start per chpasswd gesetzt). PermitRootLogin yes und PasswordAuthentication yes absichtlich –
das Ziel bildet einen Host vor dem Bootstrap nach.
Host-Keys werden nicht ins Image gebacken, sondern beim Start mit ssh-keygen -A erzeugt:
jeder neu erstellte Container hat eigene Keys. hostkeys-tauschen im Container erzeugt neue
Keys, schickt sshd (PID 1) ein SIGHUP und wartet, bis ssh-keyscan den neuen Key sieht.
Fingerprint-Vergleich handelt nur ssh-ed25519 aus, sonst könnte der gezeigte Key-Typ
wechseln und der Vergleich flattern.
Nicht laufende Ziele lassen die Tests mit Hinweis auf den Startbefehl fehlschlagen
(zielBereit wartet 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).
Issuer http://127.0.0.1:8090/sshkv – der Mock leitet ihn aus dem Host-Header ab, mit localhost entstünde ein anderer Issuer. Client-ID und -Secret werden nicht geprüft.
Bei interactiveLogin übernimmt der Mock nur die Claims aus dem Login-Formular
(tokenCallbacks greifen dann nicht). Deshalb liefert tests/mock-oidc/login.html eine
eigene Login-Seite (loginPagePath), die email, email_verified, name, preferred_username und groups: ["sshkv-admins"] vorbelegt; Knöpfe für Admin/Operator/
Reader/ohne Gruppe, das JSON bleibt frei änderbar.
Quelle: docs/issues/011-test-ssh-container.md – dort wird dieses Issue gepflegt.
## Ziel
Debian-Container mit sshd für Integrationstests (Bootstrap, Host-Key, später Ausrollen).
## Aufgaben
- [x] Dockerfile `tests/ssh-ziel/` (Debian 13, sshd, sudo, Passwort für root/test)
- [x] Compose-Datei für Tests, zwei Ziele (für Host-zu-Host)
- [x] Vitest-Projekt `integration`
- [x] Mock-OIDC-Anbieter für die Entwicklung (`mock-oidc` in `docker-compose.test.yml`)
- [x] Hilfen `tests/integration/hilfen/ziele.ts` und Rauchtest `tests/integration/ziele.test.ts`
## Akzeptanzkriterien
- [x] `pnpm test:integration` lä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`. Projektname `sshkv-test`.
- **Ports** nur auf 127.0.0.1: `ziel-a` 2221, `ziel-b` 2222, `mock-oidc` 8090. Überschreibbar über
`SSHKV_TEST_ZIEL_A`/`SSHKV_TEST_ZIEL_B`/`SSHKV_TEST_OIDC` (Format `host:port`) – dieselben
Variablen lesen Compose (Port-Bindung) und die Testhilfen, damit beide nie auseinanderlaufen.
- **Testziel** (`debian:trixie-slim`): root und `test` (Gruppe `sudo`) mit Passwort
`sshkv-test` (ENV `SSHKV_TEST_ROOT_PASSWORT`/`SSHKV_TEST_TEST_PASSWORT`, wird beim Start per
`chpasswd` gesetzt). `PermitRootLogin yes` und `PasswordAuthentication yes` absichtlich –
das Ziel bildet einen Host vor dem Bootstrap nach.
- **Host-Keys** werden nicht ins Image gebacken, sondern beim Start mit `ssh-keygen -A` erzeugt:
jeder neu erstellte Container hat eigene Keys. `hostkeys-tauschen` im Container erzeugt neue
Keys, schickt sshd (PID 1) ein SIGHUP und wartet, bis `ssh-keyscan` den neuen Key sieht.
- **Fingerprint-Vergleich** handelt nur `ssh-ed25519` aus, sonst könnte der gezeigte Key-Typ
wechseln und der Vergleich flattern.
- **Nicht laufende Ziele** lassen die Tests mit Hinweis auf den Startbefehl fehlschlagen
(`zielBereit` wartet 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).
Issuer `http://127.0.0.1:8090/sshkv` – der Mock leitet ihn aus dem Host-Header ab, mit
`localhost` entstünde ein anderer Issuer. Client-ID und -Secret werden nicht geprüft.
Bei `interactiveLogin` übernimmt der Mock **nur** die Claims aus dem Login-Formular
(`tokenCallbacks` greifen dann nicht). Deshalb liefert `tests/mock-oidc/login.html` eine
eigene Login-Seite (`loginPagePath`), die `email`, `email_verified`, `name`,
`preferred_username` und `groups: ["sshkv-admins"]` vorbelegt; Knöpfe für Admin/Operator/
Reader/ohne Gruppe, das JSON bleibt frei änderbar.
---
Quelle: `docs/issues/011-test-ssh-container.md` – dort wird dieses Issue gepflegt.
florian.wilde
added this to the v0.1.0 milestone 2026-10-12 15:12:38 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Debian-Container mit sshd für Integrationstests (Bootstrap, Host-Key, später Ausrollen).
Aufgaben
tests/ssh-ziel/(Debian 13, sshd, sudo, Passwort für root/test)integrationmock-oidcindocker-compose.test.yml)tests/integration/hilfen/ziele.tsund Rauchtesttests/integration/ziele.test.tsAkzeptanzkriterien
pnpm test:integrationläuft lokalAbhängigkeiten
#001
Notizen / Entscheidungen
pnpm test:ziele:up(=docker compose -f docker-compose.test.yml up -d --build --wait),Stopp:
pnpm test:ziele:down. Projektnamesshkv-test.ziel-a2221,ziel-b2222,mock-oidc8090. Überschreibbar überSSHKV_TEST_ZIEL_A/SSHKV_TEST_ZIEL_B/SSHKV_TEST_OIDC(Formathost:port) – dieselbenVariablen lesen Compose (Port-Bindung) und die Testhilfen, damit beide nie auseinanderlaufen.
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.
ssh-keygen -Aerzeugt:jeder neu erstellte Container hat eigene Keys.
hostkeys-tauschenim Container erzeugt neueKeys, schickt sshd (PID 1) ein SIGHUP und wartet, bis
ssh-keyscanden neuen Key sieht.ssh-ed25519aus, sonst könnte der gezeigte Key-Typwechseln und der Vergleich flattern.
(
zielBereitwartet bis 15 s auf das SSH-Banner) – kein stilles Überspringen.image:-Tag: Mit gemeinsamem Tag bricht der paralleleBuild mit „already exists“ ab.
ghcr.io/navikt/mock-oauth2-server:6.0.5(exakt gepinnt).Issuer
http://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.Bei
interactiveLoginübernimmt der Mock nur die Claims aus dem Login-Formular(
tokenCallbacksgreifen dann nicht). Deshalb lieferttests/mock-oidc/login.htmleineeigene 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.
Quelle:
docs/issues/011-test-ssh-container.md– dort wird dieses Issue gepflegt.