/ PRODUCT · OPEN SOURCE · RUST

sshh.

An SSH connection manager for the terminal. Use it just like ssh: it remembers your servers and keeps their sessions open side by side.

Linux · MIT / Apache-2.0 · Stores no passwords

Connections on the left; each column is the system ssh running in its own terminal.

/ WHY

Thirty servers, one config file and a terminal tab for each.

Which IP was staging? Which port does the backup box use, and does it go through the bastion? The answers end up spread across your shell history, a ~/.ssh/config with no notes and a dozen open tabs.

sshh keeps your connections in a list you can search, with a name, tags and notes for each one, and opens their sessions next to each other in a single window. It doesn't reimplement SSH: it always runs your system ssh, so your config, agent, ProxyJump, ControlMaster, known_hosts and FIDO keys keep working as they do today.


/ JUST LIKE SSH

Type ssh like always. Add an h.

sshh takes exactly the same arguments as ssh. The first time you connect somewhere new, a short form offers to save it, prefilled with what ssh itself would use. From then on, the alias is enough.

$ sshh -p 2222 deploy@web.example.com

New connection
Aliasweb Hostweb.example.com Userdeploy Port2222 Tagsprod, web▏

Enter save and connect · Esc just connect

# next time

$ sshh web

$ sshh web uptime

$ sshh -L 8080:localhost:80 web

01

Your flags win

With a saved alias, sshh only fills in host, user, port, key or jump host when you didn't pass them yourself. Anything it doesn't understand goes to ssh unchanged.

02

Never in the way

If something of its own fails, sshh warns and runs ssh with your original arguments. The form only appears in interactive terminals, so scripts are untouched.

03

Safe as an alias

Add alias ssh=sshh to your shell and keep typing what you always typed. With sshh ssh-config sync, scp, rsync and git know your aliases too.


/ SESSIONS

Your servers on the left. Their shells side by side.

Run sshh with no arguments and you get a lazygit-style layout: the connection list with its details, and as many terminal columns as fit on screen — each one a live session you can switch between without closing it.

  1. FIND

    Fuzzy search

    Over alias, name, user, host, description and tags. Filter with #prod or combine #prod #db.

  2. SPLIT

    Columns & panes

    Up to nine columns, and panes stacked inside them like tmux splits. Rearrange them, or take one full screen.

  3. REAL SSH

    A real terminal

    Each session is ssh in its own pseudo terminal: passwords, host key prompts, vim, htop, the mouse and 5000 lines of history.

  4. FILES

    sftp next door

    Press s to open sftp for the same server in the next column, while its ssh session keeps running.


/ KEYBOARD

Shortcuts your fingers already know.

They follow vim, less, lazygit and fzf. While a session has focus, every key goes to it — only the Alt shortcuts stay with sshh. And everything also works with the mouse.

j k
move through the list
/
search
Space
open the session in the active pane
Alt-v
open it in a new column
Alt-h Alt-l
move focus between columns
Alt-f
full screen pane
Alt-s
browse, search and copy the history
yy
copy the equivalent ssh command
c
install your public key (ssh-copy-id)
?
all the shortcuts

/ DETAILS

No secrets

sshh never stores passwords. Keep using your keys and your agent as usual.

Imports your config

sshh import-ssh-config turns your Host blocks into connections, following Includes. Try it with --dry-run.

Scriptable

ls, add, rm, history and JSON export / import to share connections with your team.

Your theme

It only uses your terminal's 16-color palette, so it looks like the rest of your setup.


/ INSTALL

One line.
No sudo.

$ curl -fsSL https://raw.githubusercontent.com/ewiggin/sshh/main/install.sh | sh

On Linux x86_64 and aarch64 it downloads the static binary, checks its SHA-256 and installs it with its man page in ~/.local/bin. On other systems it builds from source. Run it again to update. sshh is built by MEPS — if you need something similar for your team, get in touch.

VIEW ON GITHUB ↗