30 lines
1.3 KiB
Markdown
30 lines
1.3 KiB
Markdown
# M10 SSH source evidence
|
|
|
|
The released source capability is `ssh`: private-key-only, pinned-host-key,
|
|
forced-SFTP chroot access. No password, shell, command channel, agent, default
|
|
key discovery, or arbitrary remote root is supported.
|
|
|
|
## Fixture
|
|
|
|
`tests/compose.ssh.yaml` builds a test-only OpenSSH server. Each run generates
|
|
host and client Ed25519 keys under pytest `tmp_path`, mounts no committed keys,
|
|
and configures a dedicated `backup` account with `ChrootDirectory /home/backup`
|
|
and `ForceCommand internal-sftp`. The ordinary operator Compose stack is not
|
|
modified. Run `make test-ssh-integration` to build, run, and tear down the
|
|
fixture.
|
|
|
|
## Verification
|
|
|
|
- Fake transport tests cover pin mismatch before authentication/SFTP, bounded
|
|
reads, unsafe entries, and accepted/rejected private-key algorithms.
|
|
- The opt-in live test covers a private-key probe, backup, signed verification,
|
|
and restore through the forced-SFTP fixture.
|
|
- `make test-ssh-integration` passed after fixture isolation and SFTP-channel
|
|
concurrency fixes.
|
|
- Final `make check` passed: 107 unit/contract, 73 integration (one skipped),
|
|
15 fault, and 33 security tests; Ruff, mypy, TypeScript, and the frontend
|
|
build passed.
|
|
|
|
See `docs/runbooks/ssh-sources.md` for deployment prerequisites, rotation, and
|
|
containment limitations.
|