Another SSH Organizer
A fast, beautiful TUI for managing and connecting to your SSH hosts.
Stop typing ssh root@192.168.1.47 -p 2222 -i ~/.ssh/id_rsa from memory. Assho gives you a searchable, organized dashboard for all your servers — with one-key connect.
- Instant connect — select a host and hit Enter. SSH hands off immediately; the TUI exits cleanly.
- Connection history — press
hto see your recently connected hosts and reconnect instantly. Last-connected time is shown inline on each host. - ProxyJump support — specify a bastion/jump host per server; it's passed straight to SSH's
-Jflag. - Port forwarding — configure a local tunnel per host (e.g.
5432:localhost:5432); passed to SSH's-Lflag automatically. - Docker container access — expand any host to discover and shell into its running containers. Container lists auto-refresh every 30 seconds; press
Ctrl+Dto force an immediate re-scan. - Host groups — organize servers into collapsible, reorderable groups (prod, staging, homelab, etc.).
- Pinned hosts — pin frequently used hosts with
p; they float to the top of the list under a ★ Pinned header. - Notes — attach a free-text note to any host (shown truncated in the list).
- Duplicate host — clone any host with
cand tweak the copy, great for similar servers. - SSH config import — pull hosts in from
~/.ssh/configwithi. - Non-interactive CLI — connect, test, list, or export hosts without launching the TUI (see CLI Usage).
- SSH config export — print all hosts as
~/.ssh/configstanzas withassho export, so other tools (VS Code Remote, rsync, scp) can see them. - Fuzzy search — type
/and filter across all hosts and groups by alias or hostname. - Connection testing — verify connectivity before saving with
Ctrl+T. - Identity file picker — browse and select SSH keys with a built-in file picker.
- Public-key installation — from an existing host form, press
Ctrl+Kto install its configured public key, an agent/default identity, or a separately browsed.pubfile. Private keys never leave your machine. - Staged fleet key rotation — press
Kon the dashboard to rotate selected hosts sequentially. Assho verifies the replacement key before updating local config or removing the old remote key, keeps remote backups, and journals incomplete runs for safe resume. - Reviewed host trust — unknown SSH servers pause the current action and open a fingerprint review flow. OpenSSH records approved keys in
~/.ssh/known_hosts; changed or revoked server keys are never replaced automatically. - Secure password storage — passwords stored in your OS keychain (macOS Keychain / Linux
secret-tool), never in plaintext. - Cross-platform — Linux (amd64/arm64) and macOS (Intel/Apple Silicon).
curl -sL https://raw.githubusercontent.com/allisonhere/assho/main/install.sh | bashgo install github.com/allisonhere/assho@latestMake sure
~/go/binis in yourPATH.
git clone https://github.com/allisonhere/assho.git
cd assho
sudo make installsudo make install also installs the man page to /usr/local/share/man/man1/. View it with man assho.
assho # launch the TUI
assho --help # print usage
assho --version # print versionassho list # print all hosts as a table
assho connect <alias> # connect directly, no TUI
assho test <alias> # test connectivity, exits 0/1
assho export # print hosts as SSH config stanzas
assho completion bash # print bash completion script
assho completion zsh # print zsh completion script
assho completion fish # print fish completion script
assho help # print usageEnable tab-completion for assho connect and assho test:
bash — add to ~/.bashrc:
eval "$(assho completion bash)"zsh — add to ~/.zshrc:
eval "$(assho completion zsh)"fish — run once:
assho completion fish > ~/.config/fish/completions/assho.fish| Key | Action |
|---|---|
Enter |
Connect to selected host |
n |
New host |
e |
Edit selected host |
c |
Duplicate selected host |
d |
Delete (press twice to confirm) |
p |
Pin / unpin host |
Space |
Expand/collapse host containers |
→ |
Expand host or group (auto-scans Docker if empty) |
← |
Collapse host or group |
Ctrl+D |
Force re-scan Docker containers immediately |
/ |
Filter / search |
h |
Recent connection history |
i |
Import hosts from ~/.ssh/config |
K |
Open staged fleet key rotation |
Shift+↑ / Shift+↓ |
Reorder hosts / groups |
g |
Create group |
r |
Rename selected group |
d / x |
Delete group (press twice to confirm) |
a |
About |
? |
Keybinding help |
q |
Quit |
| Key | Action |
|---|---|
Enter |
Connect |
e |
Edit host |
h / Esc / q |
Back to dashboard |
| Key | Action |
|---|---|
Tab / ↓ |
Next field |
Shift+Tab / ↑ |
Previous field |
Enter |
Advance from text fields or activate the focused picker, toggle, selector, or delete action |
Ctrl+S |
Save from anywhere in the form |
Space / Enter |
Toggle agent forwarding when that control is focused |
Enter |
Open the file picker when Browse is focused |
← / → |
Cycle group selection |
Ctrl+T |
Test the connection and show its status |
Ctrl+K |
Install public-key access for the host being edited |
? |
Keybinding help |
Esc |
Cancel |
The form responds to both terminal width and height. Terminals at least 100 columns by 28 rows open a centered modal over the dimmed dashboard, with a two-column form and contextual rail. Medium and compact terminals switch to an inset or full-screen scrolling workspace automatically. The focused control is always kept in view. Terminals smaller than 36 columns by 12 rows show a resize notice instead of overflowing.
Fleet rotation is intended for small-to-medium sets of saved SSH hosts. Select hosts, choose an existing private key or generate a new Ed25519 key, and confirm. For each host Assho preflights access, installs the public key, authenticates using only the replacement key, updates the saved IdentityFile, backs up ~/.ssh/authorized_keys, removes the exact old key, and verifies once more. A host failure stops destructive steps for that host but does not stop later hosts.
Rotation journals are stored with mode 0600 under ~/.config/assho/rotation-runs/; the directory uses mode 0700. Journals contain paths, fingerprints, stages, and errors—never passwords or private-key contents. Assho manages the standard ~/.ssh/authorized_keys file only. Hosts using AuthorizedKeysCommand or a nonstandard AuthorizedKeysFile need manual cleanup. Large fleets should use SSH certificates or configuration management instead.
The workflow requires OpenSSH tools (ssh, ssh-copy-id, and ssh-keygen). When an SSH agent is active, Assho uses ssh-add once so passphrase-protected identities can be reused across the run; without an agent, it uses the selected identity directly and the strict verification step safely rejects an unusable key before anything destructive happens. sshpass remains optional and is used through its environment interface when a saved password is available; otherwise the terminal presents the normal interactive SSH prompt.
Before any TUI SSH action, Assho checks the server against the standard user and system known-hosts files. An unknown server opens a confirmation overlay, then hands control to OpenSSH so it can display the SHA256 fingerprint and write an approved entry itself. Compare that fingerprint with the server console or another trusted source. Assho never silently accepts or replaces a changed host key; a mismatch remains a hard failure.
| Field | Description |
|---|---|
| Alias | Friendly name shown in the list |
| Hostname | IP address or hostname |
| User | SSH username |
| Port | SSH port (default: 22) |
| Field | Description |
|---|---|
| Key File | Path to identity file; use the Browse control to select a file |
| Password | Stored in your OS keychain, not in the config file |
| Fwd. Agent | Toggle SSH agent forwarding (-A) with Space or Enter |
| Field | Description |
|---|---|
| ProxyJump | Jump host in [user@]host[:port] format, passed to SSH's -J |
| LocalFwd | Port tunnel in local:host:remote format, passed to SSH's -L |
| Field | Description |
|---|---|
| Group | Assign to an existing group or create a new one |
| Notes | Free-text note shown in the host list |
Sessions are stored in ~/.config/assho/hosts.json (mode 0600).
| Variable | Description |
|---|---|
ASSHO_STORE_PASSWORD |
Set to 0 or false to disable password persistence |
ASSHO_INSECURE_TEST |
Development only: set to 1 to bypass host-key verification for connection tests |
- Go
- Bubble Tea — TUI framework
- Lip Gloss — styling
