ssht is a lightweight helper around ssh that uses ~/.ssh/config as the source of truth.
It keeps the standard OpenSSH workflow intact and only adds:
- alias + description listing
fzf-based picker inssht- simple
add,rm, andeditcommands - a tiny
sshwrapper so you can runssh c <alias>
~/.ssh/configis the standard and already works withssh,scp,rsync,sftp, and editors like VS Code Remote SSH.- The tool stays lightweight because it does not need its own database.
- Descriptions are stored as comments directly above each
Hostblock.
Example:
# desc: Production app server
Host app-prod
HostName 203.0.113.10
User deploy
Port 22
IdentityFile ~/.ssh/app-prod.pemssht
ssht list
ssht add
ssht rm app-prod
ssht edit app-prod
ssh c app-prodssht opens an fzf picker to choose the target.
- Type to filter
Up/Downto moveEnterto connectEsc/Ctrl-Cto cancel
Example TUI:
Type to filter. Enter connects. Esc cancels.
Alias Description Target
> app-prod Production app server deploy@203.0.113.10
analytics-dev Analytics box ubuntu@198.51.100.25
staging-web Staging frontend deploy@203.0.113.20
Clone the repository and run:
./install.shBy default this installs symlinks to:
~/.local/bin/ssht
~/.local/bin/sshIf you want a different install location:
INSTALL_DIR=/usr/local/bin ./install.sh- OpenSSH client (
ssh) - Bash
fzf
Install fzf on macOS with:
brew install fzfssht reads entries from ~/.ssh/config.
Descriptions use a # desc: comment directly above the Host block:
# desc: Analytics box
Host analytics-dev
HostName 198.51.100.25
User ubuntu
IdentityFile ~/.ssh/analytics-dev.pemTo install on another machine:
- Clone the repository.
- Run
./install.sh. - Copy or sync your
~/.ssh/configand SSH keys. - Ensure
~/.local/binis inPATH.
sshtwrites directly to~/.ssh/config.sshtusesfzf, andssht listprints a plain list.ssh c <alias>is handled by the installed wrapper, and every othersshcall passes through unchanged.- The tool expects one primary alias per
Hostblock. - Wildcard
Hostentries are ignored in the list.