Skip to content

dev-minsoo/55h

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

37 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

55h banner

55h

Terminal-first SSH host manager built with Go and tview/tcell.

Go License Platform Homebrew Tap

brew install dev-minsoo/tap/55h

55h is focused on one job: making SSH host operations faster without leaving the terminal.

At a Glance

  • Parses ~/.ssh/config and follows every Include target recursively
  • Keeps browsing, searching, and actions in one TUI flow
  • Supports instant actions: connect, test, delete, and create hosts

Screenshot

55h UI

Why 55h

  • 55h visually resembles ssh, matching the product's purpose
  • Host list + detail panel are always visible in one place
  • Workflow stays keyboard-centric end-to-end

Core Features

  • Host list + detail panel for SSH entries
  • Fuzzy-style search across alias/host/user/options
  • In-app actions:
    • Connect (replace process with system ssh)
    • Ping/test connection
    • Delete host block in source file
  • Persistent theme selection
  • CLI for adding entries: 55h add ssh ...

Installation

Homebrew (macOS)

brew install dev-minsoo/tap/55h

Build from source

Go 1.21+ required.

go build -o 55h .
./55h

Override SSH config path

SSH_CONFIG=/path/to/config ./55h

Usage

55h

Default config target: ~/.ssh/config (with Include support).

Keybindings

Key Action
↑ / ↓ Navigate host list
: Focus search
Esc Exit search / close modals
Enter Connect to selected host
p Connection test (ping)
d Delete selected host block
t Open theme selector
q Quit
? Help modal

Connection test command:

ssh -o ConnectTimeout=5 -o BatchMode=yes -o StrictHostKeyChecking=accept-new <alias> exit 0

CLI: add ssh

55h add ssh user@host [-p port] [-i identity] [-J jump] [-o Key=Value ...] [--name alias]

Supported flags

  • -p <port>: Port
  • -i <identity>: IdentityFile
  • -J <jump>: ProxyJump
  • -o Key=Value: extra SSH options
    • forwardagent (yes|no)
    • identitiesonly (yes|no)
    • serveraliveinterval (int)
    • serveralivecountmax (int)
  • --name <alias>: force host alias

Contributing

Issues and PRs are welcome.

Before opening a PR

  1. Fork the repository and create a feature branch.
  2. Run local checks:
make fmt
make vet
make test
make build
  1. Verify the app flow manually:
go run .
  1. If behavior or keybindings changed, update docs and screenshots in docs/.

Issue Reports

Please include:

  • OS and Go version
  • Sanitized sample of related SSH config
  • Expected behavior and actual behavior
  • Reproduction steps

Commit Style

Recommended prefixes:

  • feat:
  • fix:
  • docs:
  • refactor:
  • test:
  • chore:

License

MIT

About

Manage SSH the way it should feel — fast, simple, terminal-native

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors