sshtui

_ _____ _ _ ___
___ ___ | |_|_ _| | | |_ _| SSH + TUI
/ __/ __|| '_ \| | | | | || | Inspect and generate SSH keys
\__ \__ \| | | | | | |_| || | and certificates.
|___/___/|_| |_|_| \___/|___| https://github.com/diegovrocha/sshtui
TUI for inspecting and generating SSH keys and certificates. Uses ssh-keygen under the hood.
Built with Bubble Tea. Single binary, only dep: openssh-client.
Contributions welcome! See CONTRIBUTING.md.
Requirements
- openssh-client — pre-installed on macOS and most Linux distributions. Needs
ssh-keygen in $PATH.
Install
Quick install (macOS/Linux)
curl -sSLf https://raw.githubusercontent.com/diegovrocha/sshtui/main/install.sh | sh
Manual download
Download the binary for your platform from Releases:
| Platform |
File |
| macOS (Apple Silicon) |
sshtui_darwin_arm64.tar.gz |
| macOS (Intel) |
sshtui_darwin_amd64.tar.gz |
| Linux (amd64) |
sshtui_linux_amd64.tar.gz |
| Linux (arm64) |
sshtui_linux_arm64.tar.gz |
| Windows (amd64) |
sshtui_windows_amd64.zip |
Extract and move to your PATH:
tar -xzf sshtui_<os>_<arch>.tar.gz
sudo mv sshtui /usr/local/bin/
From source
Requires Go 1.22+:
git clone https://github.com/diegovrocha/sshtui.git
cd sshtui
make install # builds and copies to /usr/local/bin
Other make targets:
make build # build binary locally (with version injected via ldflags)
make test # run Go tests
make vet # run go vet
make check # vet + test
make uninstall # remove from /usr/local/bin
# Release (maintainers only)
make release-auto # detect bump from commit messages (recommended)
make release-patch # bug fix: v0.1.0 → v0.1.1
make release-minor # new feature: v0.1.0 → v0.2.0
make release-major # breaking change: v0.1.0 → v1.0.0
make release VERSION=0.2.0 # explicit version
Each release-* target runs go vet, tests, tags and pushes. GitHub Actions then builds and publishes the release automatically.
release-auto inspects the commit messages since the last tag and picks the bump kind using conventional commits:
| Commit prefix |
Bump |
feat!:, fix!:, or BREAKING CHANGE: in body |
major |
feat:, feat(scope): |
minor |
anything else (fix:, docs:, refactor:, etc.) |
patch |
Features
Inspect
- Inspect key — public or private key: fingerprint (SHA-256 + MD5), type, size, comment, encrypted flag
- Inspect cert — principals, validity, signing CA, key ID, extensions, days remaining
Generate
- Generate key — Ed25519 / RSA / ECDSA / DSA, configurable bits / curve, optional passphrase, comment, output preset (default / hostname suffix / custom)
Utilities
- History — log of all operations stored in
~/.sshtui/history.log, viewable from the menu
- Update — in-app download and replace of the binary. Shows scrollable GitHub release notes before installing, then auto-restarts sshtui with the new version (3-second countdown, press
r to restart immediately or c to cancel). Also auto-detects new releases on launch and shows a notice in the banner
- Quit
Navigation
Press ? on any screen to see a contextual help overlay listing the keys that screen understands.
General
| Key |
Action |
↑/↓ or j/k |
Navigate menu and lists |
Enter |
Select / Confirm / Open details |
Esc |
Back to previous screen |
q |
Quit (main menu only) |
Ctrl+C |
Quit from anywhere |
/ |
Fuzzy search filter in main menu |
? |
Toggle contextual help |
File picker
| Key |
Action |
→ or Enter |
Enter highlighted folder |
← |
Go to parent directory |
| Type |
Filter files by name |
Inspect results
| Key |
Action |
y |
Copy details to clipboard |
s |
Save details as .txt |
n |
Inspect another key / cert |
↑/↓ |
Scroll long output |
Update
| Key |
Action |
↑/↓ |
Scroll changelog |
Enter |
Install update (on confirm step) / Restart now (on success) |
r |
Restart now after update |
c |
Cancel auto-restart |
Docker (test on Linux)
A Dockerfile.test is provided to try sshtui on Linux without installing anything locally:
docker build -t sshtui-test -f Dockerfile.test .
docker run -it --rm -v $(pwd):/keys sshtui-test
The container mounts your current directory as /keys so sshtui can access local key files. Uses debian:stable-slim and downloads the latest released binary automatically.
Theme
sshtui auto-detects light / dark terminals via the $COLORFGBG environment variable and picks appropriate colors. To override detection:
SSHTUI_THEME=light sshtui
SSHTUI_THEME=dark sshtui
| Variable |
Values |
Effect |
SSHTUI_THEME |
light, dark |
Force theme (overrides autodetection) |
COLORFGBG |
auto |
Read from terminal for autodetection |
Screenshots / demos
TODO — add screenshots and an asciinema demo. For now, run sshtui to see it in action.
License
MIT - Diêgo Vieira Rocha