1 How It Works
Kyle Mendell edited this page 2026-10-27 15:06:39 -05:00

overpass has three moving parts: a control plane, node agents, and clients. The design goal is that the proxy brokers connectivity but never sees your SSH traffic in the clear.

Certificate authorities

On first run the control plane generates two Ed25519 certificate authorities:

  • User CA — signs short-lived user certificates when you log in.
  • Host CA — signs node host certificates when a node enrolls.

Nodes trust the User CA (so they accept user certificates); clients trust the Host CA (so they can verify they're talking to a genuine node). Neither side needs long-lived authorized-keys files.

Logging in

op login authenticates (local password or OIDC) and receives a user certificate valid for a few hours. The certificate encodes:

  • the principals (unix logins) you may use, and
  • access groups — which logins are allowed on which nodes, derived from your roles (see RBAC).

The certificate, not a static key, is what authorizes the SSH connection.

The reverse tunnel

Node agents dial out to the proxy's tunnel port and hold the connection open (multiplexed with yamux over TLS). This means:

  • nodes need no inbound firewall rules — only outbound to the proxy;
  • the proxy always has a live path to each online node.
flowchart LR
  subgraph client[Your laptop]
    OP[op ssh]
  end
  subgraph proxy[Control plane]
    P[Proxy :3023]
  end
  subgraph node[Server]
    N[node agent + sshd]
  end
  N -- "dials out :3024" --> P
  OP -- ":3023" --> P
  P == "byte bridge" ==> N

(With TLS routing enabled, both of those flows — and gRPC and the web UI — share the web port, distinguished by TLS ALPN.)

End-to-end SSH — the core invariant

When you run op ssh, the proxy splices two byte streams together: your client and the node's tunnel. It performs no SSH handshake of its own — it is a dumb L4 bridge. The SSH session is negotiated directly between your client and the node's host key, so:

  • the proxy cannot read or modify your session;
  • the node authenticates your user certificate against the User CA and enforces your access groups fail-closed.

Note

The one deliberate exception is the browser terminal: there your private key lives in the browser, so the control plane is a legitimate SSH endpoint. It mints a single-use, single-node delegated certificate and bridges the session over a WebSocket. See the web UI.

Authorization at the node

Every node validates an incoming user certificate with ssh.CertChecker: it checks the User CA signature, validity window, principals, and critical options, then enforces the certificate's access groups against its own labels. A user only reaches nodes their roles allow, and the proxy never participates in that decision.