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 — most modern terminals qualify
- 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 - -
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: Connect, Create, Edit, Delete. Switch tabs with Tab / Shift+Tab or ← / →, pick with Enter, quit with Esc or Ctrl+C. See the TUI keys reference for the full map.