-
Notifications
You must be signed in to change notification settings - Fork 0
Security
ssm is designed so that passwords never touch disk and never appear on a command line or in a persistent environment variable.
Passwords are stored in the OS keychain — macOS Keychain on macOS, Secret
Service (D-Bus) on Linux — via the keyring
crate. The keychain entry is keyed by the session name under the service
dots-ssm.
When a session has a stored password, ssm hands it to OpenSSH through the
SSH_ASKPASS mechanism (SSH_ASKPASS_REQUIRE=force, OpenSSH 8.4+):
- ssm spawns a small Unix domain socket server protected by a one-time nonce.
- ssm sets
SSH_ASKPASSto point at itself andSSH_ASKPASS_REQUIRE=force. - When ssh needs the password, it re-execs ssm as its askpass helper.
- The helper connects to the socket, presents the nonce, and receives the password — once. Serve-once semantics prevent brute-force loops on wrong passwords.
- The socket is torn down immediately after a successful serve.
Nothing is written to disk, and the password never appears on a command line or in a persistent environment variable.
- For plain
ssh, ssm adds-o StrictHostKeyChecking=accept-new, so first-time connections to new hosts still work; a changed host key still aborts (MITM guard). -
herdr --remotetakes only a target (no ssh flags), so per-session port /ProxyJumpmust live in~/.ssh/config, and the host should already be inknown_hosts. - Because
herdr --remoteshells out to systemssh, the sameSSH_ASKPASSmechanism supplies the password to herdr connections too — stored passwords work in both modes withoutsshpass.
ssm only answers password prompts. It does not answer key passphrases or host key confirmation prompts — those are left for the user.
Off by default. Enable via Space → Settings → b, or biometric_unlock = true
in config.toml. When on, ssm requires a biometric check before revealing a
stored password at connect time. Passwords are loaded lazily (only at connect),
so the prompt actually gates access.
Uses fprintd-verify — a fingerprint presence gate in front of the Secret
Service release. This is not cryptographically bound to the secret; it's a
convenience gate.
Touch ID is not wired up yet. A real implementation needs LocalAuthentication
and a stably code-signed binary so the Secure Enclave keychain item survives
rebuilds. Use scripts/sign-macos.sh with a free self-signed "Code Signing"
certificate for personal use, or a Developer ID certificate + notarization to
distribute. Until it lands, enabling biometric on macOS falls back to a plain
keychain read with a warning.
If biometric is enabled but no verifier is available, ssm warns and proceeds rather than locking you out of your own hosts.
Guides
Contributing