Skip to main content

SSH Manager (ssh-mngr)

A beautiful terminal SSH connection manager — like mRemoteNG / RoyalTSX, but right inside your terminal.

PyPI version Python 3.9+ License: MIT

Built with Textual + Rich — no GUI, no browser, just your terminal.


✨ Why?

If you SSH into multiple Linux servers daily — some with your user, some with root, some with PEM keys — you need a fast way to manage, search, and connect. No more scrolling through bash history or maintaining shell aliases.

ssh-mngr gives you a Norton Commander-style TUI with a sidebar of grouped connections, a detail panel, live search, and one-key connect.


📦 Install

# Homebrew (macOS)
brew tap sk3pp3r/ssh-mngr https://github.com/sk3pp3r/ssh-mngr
brew install ssh-mngr

# From PyPI
pipx install ssh-mngr

# Or with pip
pip install ssh-mngr

Install from source

git clone https://github.com/sk3pp3r/ssh-mngr.git
cd ssh-mngr
pip install .

Offline install (air-gapped servers)

# On a machine with internet — build wheels
pip wheel . -w dist/
pip download -d dist/ .

# Transfer the dist/ folder via sftp/scp
sftp user@offline-host
sftp> put dist/* /tmp/ssh-mngr-wheels/

# On the offline machine
pip install --no-index --find-links=/tmp/ssh-mngr-wheels/ ssh-mngr

🚀 Usage

ssh-mngr     # launch the TUI
ssm           # short alias — same thing

⌨️ Keyboard Shortcuts

Key Action
a Add new connection
e Edit selected connection
d Delete selected connection
f Quick connect — ad-hoc SSH
Enter Connect to selected server
i Import from ~/.ssh/config
s Search — focus the filter bar
r Refresh — reload config file
q Quit

🎯 Features

Feature Description
Grouped connections Organise servers into named folders
PEM / identity-file Per-connection key file support
Quick connect Ad-hoc user@host:port without saving
SSH config import One-key import from ~/.ssh/config
Live search Filter connections as you type
Detail panel Shows host info, SSH command, last-connected
Last connected Tracks when you last used each connection
Cross-platform Works on macOS and Linux terminals

🏗️ Project Structure

src/ssh_mngr/
├── app.py          # Main Textual app — layout, keybindings, SSH launch
├── screens.py      # Modal dialogs (add/edit/quick-connect/confirm)
├── config.py       # JSON config load/save
├── models.py       # SSHConnection dataclass
└── ssh_import.py   # ~/.ssh/config parser

⚙️ Configuration

Connections are stored as JSON at:

~/.config/ssh-mngr/connections.json

Example:

{
  "version": 1,
  "connections": [
    {
      "id": "a1b2c3d4",
      "name": "Production Web",
      "host": "10.0.1.50",
      "port": 22,
      "username": "deploy",
      "identity_file": "~/.ssh/prod.pem",
      "group": "Production",
      "description": "Main web server",
      "last_connected": "2026-03-25T14:30:00"
    }
  ]
}

🗺️ Roadmap

  • Duplicate connection
  • SSH tunnels / port forwarding
  • Connection tags & multi-group
  • Export / import connections (JSON / YAML)
  • SCP / file transfer shortcut
  • Theme customisation

📄 License

MIT — see LICENSE for details.

Metadata

Release files for ssh-mngr 0.1.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ssh-mngr 0.1.6
File Size Uploaded
ssh_mngr-0.1.6.tar.gz 16.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ssh-mngr 0.1.6
File Interpreter ABI Platform
ssh_mngr-0.1.6-py3-none-any.whl Python 3 none any Details

Total release size: 30.1 kB

Release files / ssh_mngr-0.1.6.tar.gz

Download URL ssh_mngr-0.1.6.tar.gz
Size 16.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8dfaa438453abb1a632dd461e55888f87c4e97c68f61edd89913ca4cc94711fc
BLAKE2b-256 checksum
How to use checksums
dfc9c9ae689f3f06994d09bbcf61618924ea748baa773c7cf5e736d1d4054fe5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release files / ssh_mngr-0.1.6-py3-none-any.whl

Download URL ssh_mngr-0.1.6-py3-none-any.whl
Size 14.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
90d80f8f8063d612544c1589c3b6496b12919002211c6091dc92057bf4363013
BLAKE2b-256 checksum
How to use checksums
c908a2ef456e75a66d9f173063f5a60ad31f365848e95c80d0e544144494578d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.12

Release history Release notifications | RSS feed

This release

0.1.6 This release

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page