You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
refactor!(auth): drop SSH handshake secret in favor of mTLS
The OPENSHELL_SSH_HANDSHAKE_SECRET / x-sandbox-secret mechanism was
misnamed: it does not authenticate SSH (which flows over the
RelayStream gRPC RPC and is gated by mTLS plus supervisor Unix-socket
permissions). It only gated a small set of sandbox-to-gateway
control-plane RPCs, and production deployments already enforce mTLS
on that channel — so the shared secret was redundant.
Replace the secret check with an mTLS-presence marker. Sandbox-class
methods (ReportPolicyStatus, PushSandboxLogs,
GetSandboxProviderEnvironment, SubmitPolicyAnalysis, GetSandboxConfig,
GetInferenceBundle) accept callers without a Bearer token; the gRPC
mTLS handshake is the trust boundary. Dual-auth methods treat
Bearer-present as full-scope CLI access and Bearer-absent as
sandbox-restricted scope via validate_sandbox_caller_update.
Drops the secret from all drivers (K8s, Podman, VM), the sandbox gRPC
interceptor, the Helm chart (values + pre-install hook + StatefulSet
env), the RPM bootstrap script, the man pages, and the
debug-openshell-cluster skill. Also removes the never-read
ssh_handshake_skew_secs flag and config field.
BREAKING CHANGE: --ssh-handshake-secret / OPENSHELL_SSH_HANDSHAKE_SECRET
and --ssh-handshake-skew-secs / OPENSHELL_SSH_HANDSHAKE_SKEW_SECS are
removed from the gateway, sandbox, and all driver binaries. The
openshell-ssh-handshake K8s Secret is no longer managed by the chart;
operators may delete the orphan. Deployments using
--disable-gateway-auth must enforce caller authentication at the
fronting proxy, since the gateway no longer validates a per-request
secret on sandbox-class methods.
Refs OS-174.
|`OPENSHELL_SANDBOX_SSH_PORT`|`--sandbox-ssh-port`|`2222`| SSH compatibility port inside the container. |
303
-
|`OPENSHELL_SSH_HANDSHAKE_SECRET`|`--ssh-handshake-secret`| Required standalone, gateway-generated in-process | Shared secret for the NSSH1 handshake. |
304
-
|`OPENSHELL_SSH_HANDSHAKE_SKEW_SECS`|`--ssh-handshake-skew-secs`|`300`| Allowed timestamp skew for SSH handshake validation. |
305
296
|`OPENSHELL_SANDBOX_SSH_SOCKET_PATH`|`--sandbox-ssh-socket-path`|`/run/openshell/ssh.sock`| Standalone driver only: supervisor Unix socket path in `PodmanComputeConfig`. In-gateway Podman uses server `config.sandbox_ssh_socket_path`. |
306
297
|`OPENSHELL_STOP_TIMEOUT`|`--stop-timeout`|`10`| Container stop timeout in seconds. |
307
298
|`OPENSHELL_SUPERVISOR_IMAGE`|`--supervisor-image`|`openshell/supervisor:latest` through the gateway, required standalone | OCI image containing the supervisor binary. |
0 commit comments