Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Changelog

v0.3.1

The wire-protocol baseline remains 0.1.

Added

  • ssh-obi-server --detach --session ID detaches the attached client from a selected session on the same server host. Use ssh-obi-server --list to find session IDs, including non-current sessions.

Notes

  • Bare ssh-obi-server --detach retains its existing behavior and targets the session identified by the remote shell environment.

v0.3.0

The wire-protocol baseline remains 0.1.

Added

  • Negotiated keepalive.v1 heartbeats work automatically for attached sessions; users do not need to configure unfamiliar SSH options.
  • The client sends a ping every 15 seconds and requires the matching pong within 45 seconds. An unresponsive connection enters the existing reconnect flow.
  • A broker that negotiated keepalive releases its daemon attachment when no client ping arrives for 45 seconds, making the session available for reconnect.

Notes

  • Older clients and brokers do not negotiate keepalive.v1 and retain the previous connection behavior.

v0.2.1

The wire-protocol baseline remains 0.1.

Added

  • --detach-connect selects and takes over an existing session. --session ID overrides automatic selection.
  • --obi-version reports the package version from the client and server.
  • Remote bootstrap compares the server package version with the local client’s compiled version. Missing support or an older server enters the install path.

Changed

  • Reconnection retries temporary SSH, DNS, and routing failures indefinitely, with capped exponential delays from 1s through 120s.
  • Retry deadlines use suspend-aware monotonic machine time, and the terminal is restored for interactive OpenSSH prompts during recovery.
  • server-bin is enabled by default, so cargo install ssh-obi installs the remote server on OpenBSD without extra feature flags.

Fixed

  • Login shells inherit the launching process’s umask rather than being forced to umask 0000. Daemon sockets retain explicit owner-only permissions inside their private per-user directory.

v0.1.3

Released for the 0.1.x protocol line.

Added

  • New sessions print the remote host MOTD before the shell starts, using /run/motd.dynamic, /etc/motd, and readable non-empty files under /etc/motd.d/. A user ~/.hushlogin suppresses this MOTD output.

Changed

  • Automatic reconnect retries now use a small capped exponential backoff: 125ms, 250ms, 500ms, 1s, then 2s, with a maximum of 10 attempts.

Notes

  • The protocol baseline remains 0.1.

v0.1.2

Released for the 0.1.x protocol line.

Added

  • On Linux systems booted with systemd and a user bus, newly spawned PTY children are moved into a transient user scope before exec. This follows the same systemd StartTransientUnit shape used by tmux >= 3.2 for cgroup detaching, and falls back cleanly when systemd is unavailable.
  • During automatic reconnect, if the target session still reports SessionBusy, the client asks the stale attached client to detach and then retries the reconnect.
  • The Unix bootstrap reports an explicit OpenBSD message when no compatible server is already installed. OpenBSD has no prebuilt release tarballs; install a Rust toolchain and run cargo install --features server-bin ssh-obi.
  • ssh-obi-server --list lists currently alive sessions for the remote user on the server host, including busy sessions and a marker for the current session when run inside an ssh-obi session.

Fixed

  • OpenBSD install-only bootstrap runs now complete successfully when a compatible ssh-obi-server already exists at ~/.cargo/bin/ssh-obi-server or on PATH.

Notes

  • The protocol baseline remains 0.1.
  • Non-systemd Linux systems and non-Linux Unix systems do not require any systemd tooling.

v0.1.1

Released for the 0.1.x protocol line.

Added

  • The client sends an initial terminal window size before attach and new-session requests when the remote server supports initial-window-size.v1.
  • New sessions create the remote PTY with the local terminal size when that size is available.
  • Reattaches apply the local terminal size before replaying buffered output.
  • The Unix bootstrap detects compatible ssh-obi-server binaries in three places before trying a tarball install: ~/.ssh-obi/bin/ssh-obi-server, ~/.cargo/bin/ssh-obi-server, and ssh-obi-server found on PATH.

Notes

  • The protocol baseline remains 0.1; initial-window-size.v1 is negotiated as a capability.
  • Platforms without a published release tarball can still be used as remote servers when a compatible ssh-obi-server is installed by Cargo or a distro package.

v0.1.0

Initial public release.

Added

  • Local ssh-obi client and Unix remote ssh-obi-server.
  • Per-user long-lived remote sessions.
  • Attach, new-session, list, and detach commands.
  • Reconnect to a known session after ambiguous disconnects.
  • Bounded replay of recent output on reattach.
  • Shell exit status forwarding.
  • Unix bootstrap install flow and Windows client-only bootstrap flow.