SysTeam.pl / Products / sshmgr

sshmgr

modern SSH manager

Your fleet, one terminal

Modern SSH connection manager for the terminal. Full CLI + TUI in a single Go binary. Jump hosts, OS-keyring login chains, port forwarding, parallel exec across host fleets, and native Ansible integration.

What it looks like

Launch with sshmgr ui. The default view is the tree, grouped by each host's primary group. Tab switches to a flat alphabetical list.

sshmgr ui
┌── hosts (tree) ──────────────────┐┌── details ───────────────────────────────┐
│ 🟢  ▼ fleet (365)                ││ web-eu-01                                │
│ 🟢      bastion-eu  [jumphost]   ││                                          │
│ 🟢      web-eu-01                ││ host:            web-eu-01               │
│ 🟢      web-eu-02                ││ port:            12344                   │
│ 🟢  ▶ home (8)                   ││ user:            gn                      │
│   ▶ (ungrouped) (0)            ││ key:             ~/.ssh/id_ed25519       │
│                                  ││ groups:          fleet                   │
│                                  ││ tags:            fleet                   │
│                                  ││ auto_duo_push:   true                    │
│                                  ││ proxy_command:   ssh bastion-eu -W %h:%p │
│                                  ││ last connect:    2026-05-19T13:24:18Z    │
└──────────────────────────────────┘└──────────────────────────────────────────┘
 tree · sort name · 373 hosts
 Enter/s/f/p/c shell/sftp/files/fwd/snippet  x exec  w watch  P playbook
 Space mark  Tab tree  S sort  a/e/d host  A/R/D group  / filter  ? help  q quit

What sshmgr does

Built for teams that manage dozens or hundreds of SSH hosts through jumphost bastions, Duo MFA, and multi-step sudo

CLI + TUI, one binary

Full terminal UI with host tree, live status indicators, and connection menus — plus a scriptable CLI for pipelines. Single Go binary, no daemons.

Login chains with OS keyring

Multi-step SSH login (su, sudo, jumphost) with passwords from OS keyring (Secret Service, macOS Keychain), env vars, custom commands, or interactive prompts.

Port forwarding & file transfer

-L / -R / -D SOCKS5 + X11 + agent forwarding. Built-in SCP / SFTP / 2-pane file manager sharing the same connect chain (proxy_jump, bastions, all auth backends).

Parallel exec on fleets

sshmgr exec --group fleet 'uptime' — N hosts in parallel with bounded concurrency, prefixed output, pass/fail summary, retries, --diff, --json.

Ansible integration

export ansible turns the fleet into an inventory (resolving bastion chains and proxy hops for you). playbook subcommand runs ansible-playbook against any selector.

sshmgr lint

Catches broken proxy_jump refs, missing key files, snippet collisions, and undefined groups before you ever hit them at connect time.

Snippets per host or group

Saved one-liners picked from a TUI menu or run from the CLI: sshmgr alias :name. Inherited from groups, shareable from reusable file libraries.

Session recording

Optional tee of the remote shell to a per-session log file for audit, replay, and post-mortem troubleshooting. No black boxes.

3 colour themes

Default (aqua), hacker (matrix green), cyberpunk (neon). Live host status (UP / DOWN / DEGRADED) visible in the TUI without a manual refresh.

Quick install

Linux or macOS, Go 1.26+. Windows works in theory but isn't tested.

$ git clone https://github.com/pawel-cygal/sshmgr.git
$ cd sshmgr
$ go build -o sshmgr .
$ sudo install -m 0755 sshmgr /usr/local/bin/sshmgr

$ sshmgr ui             # launch the TUI
$ sshmgr <alias>        # connect to a host (CLI default)
$ sshmgr --help         # list all CLI commands

Full README on GitHub →

Try sshmgr on your fleet

MIT-licensed open source. No user accounts, no telemetry, no daemons. Clone, build, use. Issues and pull requests welcome.