Get started
dssh wraps your system ssh binary with a TUI, a tiny CLI, and a SQLite store at ~/.dssh/dssh.db. Zero daemons, one static binary, nothing to edit by hand unless you want to.
Requirements
Section titled “Requirements”sshclient inPATH(OpenSSH on Linux/macOS/BSD, OpenSSH for Windows on Win10+)- A terminal that handles TrueColor + Unicode for the TUI — you probably have one installed unless you avoided updates since 2016
- Only if building from source: Go
1.26+
Install
Section titled “Install”# Unix (Linux, macOS, FreeBSD)curl -fsSL https://raw.githubusercontent.com/madLinux7/dssh/main/install.sh | sh# Windows PowerShellirm https://raw.githubusercontent.com/madLinux7/dssh/main/install.ps1 | iexUnix installs to ~/.local/bin (override with INSTALL_DIR=/custom/path).
Windows installs to %LOCALAPPDATA%\dssh and patches PATH.
yay -S dssh# orparu -S dsshbrew install madLinux7/tap/dsshwinget install madLinux.dsshscoop bucket add madLinux7_scoop-bucket https://github.com/madLinux7/scoop-bucketscoop install madLinux7_scoop-bucket/dsshgo install github.com/madLinux7/dssh/cmd/dssh@latestOr clone and build:
git clone https://github.com/madLinux7/dssh.gitcd dsshmake build # static, CGO-free binarymake release # + UPX compression (needs upx)Verify the install:
dssh --versionFirst run — pick a storage mode
Section titled “First run — pick a storage mode”The first time you launch dssh, a one-time dialog asks where to keep connections. Pick whichever fits — you can change it later with dssh config.
| Mode | Stores connections in | When to pick it |
|---|---|---|
| SQLite | ~/.dssh/dssh.db (encrypted passwords supported) |
Clean slate, you want passwords + portability in one file |
| ssh_config | ~/.ssh/config or a path you choose |
You already live in ssh_config and want to keep it the source of truth |
| Both | SQLite and ssh_config, toggle with Ctrl+L |
Mixed: keep team-shared hosts in ssh_config, personal/password hosts in SQLite |
When picking ssh_config or Both, you’ll also choose a destination file: the main ~/.ssh/config, a directive file like ~/.ssh/config.d/dssh, or any custom path. If the file doesn’t exist, dssh offers to create it.
Your first connection
Section titled “Your first connection”-
Add a host via CLI — quickest path, uses your default pubkey:
Terminal window dssh add myserver root@192.168.1.10Or go interactive with the wizard:
Terminal window dssh create -
Connect — name alone, nothing else:
Terminal window dssh myserverYou’re in. On Unix, dssh
syscall.Execs intossh— zero wrapper overhead, full terminal control. -
List what you have:
Terminal window dssh lsNAME USER HOST PORT AUTH DIR JUMPmyserver root 192.168.1.10 22 key - - -
Optional: organize with groups:
Terminal window dssh group create Homedssh add nas --group Home root@192.168.1.20dssh list --group HomeGroups must exist before
dssh add --group. See the grouping guide for TUI workflows, assignment, and source-scope details.
Password-authenticated hosts
Section titled “Password-authenticated hosts”For hosts without key auth, save the password encrypted:
dssh add prod-box deploy@10.0.0.5 'hunter2'First time you save a password, dssh prompts you to create a master passphrase. That passphrase drives Argon2id key derivation; the resulting AES-256-GCM key encrypts every stored password. Your passphrase itself is never written to disk — a verification token proves correctness on later unlocks.
Prefer key auth whenever you can — it’s faster to launch (process replacement, not a child) and leaves no secret at rest.
Run the full TUI
Section titled “Run the full TUI”No arguments, no sub-command — just:
dsshFour tabs — Create, Connect, Edit, and Delete — start in a two-pane layout. Use Tab / Shift+Tab to change pane focus and ← / → to change tabs where allowed.
Press Ctrl+P to collapse or expand the right grouping pane; the preference persists between sessions. Press ? to hide or show the contextual key hints.
In Connect, the Edit list, and Delete, the right pane filters connections by group. In Create and an active Edit form, it becomes Assign Groups; use Space to toggle assignments and Ctrl+S to save from either pane.
Select (No Groups) to remove the group filter and show all connections. See the TUI keys reference for group management, complete controls, and context-specific behavior.
Collapsing the grouping pane resets the filter to (No Groups). If you collapse it while creating or editing a connection, any unsaved group-assignment changes are discarded.