Implement the headless SSH server

This commit is contained in:
2026-07-19 20:35:02 +02:00
parent 92a942d52f
commit 45cb0cd502
26 changed files with 4226 additions and 55 deletions

View File

@@ -64,20 +64,23 @@ rule ServerBoot {
-- HTTP endpoint stays bound to 127.0.0.1; never exposed directly
ensures: CliSyncWatcherStarted()
ensures: SshDaemonStarted()
-- ExRatatui.SSH.Daemon: public-key auth only (no passwords),
-- tcpip_tunnel_out enabled so GUI clients tunnel to the loopback
-- endpoint through the same SSH connection and the same keys
-- Public-key auth only (no passwords). Direct TCP/IP forwarding is
-- restricted to the server-owned loopback endpoint; the native GUI
-- protocol and terminal sessions use channels on the same connection.
ensures: SshKeyMaterial.created()
-- host key generated and authorized_keys touched on first boot only
}
rule GuiRemoteConnection {
when: GuiConnectRequested()
-- Desktop "Connect to Server…": ssh connect with the same public keys
-- (client identity + known_hosts in the private ssh dir), then an OTP
-- TCP/IP tunnel to the server's loopback endpoint; the webview loads
-- the local tunnel end. Disconnect returns to the local shell URL.
ensures: WebviewTunneledToServer()
-- Desktop "Connect to Server…": SSH connects with the same public keys
-- (client identity + known_hosts in the private ssh dir), negotiates the
-- versioned `ruds` subsystem, lists server projects, and opens the selected
-- project through the shared CoreHost application-service operations. The
-- channel carries ordered domain events, task snapshots, and the server UI
-- locale. Request IDs make replayed writes exactly-once. Disconnect returns
-- to the local project without exposing or copying the SQLite database.
ensures: NativeRemoteProjectOpened()
}
rule TuiSession {