c983a25609
internal/felhomsshd: agent-managed felhom-sshd (claim port [8822,2222,8022,62222] loud-fail-on-exhaustion; render config→sshd -t→reload never-restart-on-change [SF-2]; operator authorized_keys from the hub block outside ~/.ssh [SF-3]); the static-table nft belt mutating ONLY @operator_ips + @ssh_port [trap 4]; health/heal (reset-failed-then-restart with 10min cooldown, NEVER restart onto an invalid config) + the oob heartbeat stanza. configs/felhom-sshd.service (SAFE, no RuntimeDirectory [SF-1]). FELHOM_SSHD + FELHOM_OOB sudoers (set-elements only). oob.enabled config DEFAULT FALSE. Wired into main like wgtunnel. Non-hollow tests: claim clean/contention/idempotent/exhaustion; config safe+byte-stable+refuses-:22; belt mutate-then-idempotent + never-touches-rules; heal no-restart-on-invalid-config + cooldown; status reflects block. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PSK5g6qYLknKj8u3QAFEr6
29 lines
1.4 KiB
Desktop File
29 lines
1.4 KiB
Desktop File
# felhom-sshd.service (TASK H1) — install as /etc/systemd/system/felhom-sshd.service.
|
|
#
|
|
# The dedicated OOB sshd instance: a SECOND sshd on a claimed non-22 port, COEXISTING with the
|
|
# customer's/stock sshd on :22 (never touched). Config is AGENT-RENDERED at /etc/felhom-sshd/sshd_config
|
|
# (Port from the agent's claim); the agent reloads on change (never restart-on-change [SF-2]).
|
|
#
|
|
# CRITICAL [SF-1]: this unit MUST NOT declare `RuntimeDirectory=` — that directive (value `sshd`)
|
|
# removed the SHARED /run/sshd and broke the stock sshd live (SPIKE-felhom-sshd §8). /run/sshd is
|
|
# guaranteed by G1 (tmpfiles + watchdog); the ExecStartPre mkdir is a harmless extra guarantee. The
|
|
# host-install RuntimeDirectory guard will REJECT this unit if the directive is ever added.
|
|
[Unit]
|
|
Description=Felhom OOB sshd (dedicated instance, agent-managed; H1)
|
|
After=network.target
|
|
|
|
[Service]
|
|
Type=notify
|
|
ExecStartPre=-/usr/bin/mkdir -p /run/sshd
|
|
ExecStartPre=/usr/sbin/sshd -t -f /etc/felhom-sshd/sshd_config
|
|
ExecStart=/usr/sbin/sshd -D -f /etc/felhom-sshd/sshd_config
|
|
# Config-change path: validate then HUP — a bad reload is REFUSED and the running daemon SURVIVES
|
|
# [SF-2]. The agent always writes→sshd -t→reload; it never `restart`s on a config change.
|
|
ExecReload=/usr/sbin/sshd -t -f /etc/felhom-sshd/sshd_config
|
|
ExecReload=/bin/kill -HUP $MAINPID
|
|
KillMode=process
|
|
Restart=on-failure
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|