A fast and powerful SSH connection manager
Go to file
kirbylife 363bbbdf2b Add info to send the project to crates.io 2026-07-26 00:38:45 -06:00
src Add 'upload' instruction to upload a file to the host using scp command 2026-07-26 00:37:28 -06:00
.gitignore remove sshch file from the repo 2026-07-24 21:35:25 -06:00
Cargo.lock Finally works, now the commands it's launched 2026-07-25 01:20:38 -06:00
Cargo.toml Add info to send the project to crates.io 2026-07-26 00:38:45 -06:00
LICENSE Add LICENSE file 2026-07-26 00:38:13 -06:00
README.md Add 'upload' instruction to upload a file to the host using scp command 2026-07-26 00:37:28 -06:00

README.md

sshmngrs

A fast and simple SSH connection manager in a terminal UI, built in Rust and ratatui.

Features

  • Terminal UI to browse your saved connections
  • Each connection has an alias and the command to run (for example ssh root@192.168.100.1)
  • Launch a connection: the TUI suspends, the command runs with full access to the terminal (password prompts, host-key confirmations, etc.), and the TUI is restored afterwards
  • Vim-style navigation (j / k) alongside the arrow keys
  • Connections are stored as TOML in a config file located in $HOME/.config/sshmngrs.conf

Installation

Requires a recent Rust toolchain and the ssh client available on your PATH.

# Run from source
cargo run --release

# Or install the binary
cargo install --path .

# Or from crates.io
cargo install sshmngrs

Usage

Launch the app:

sshmngrs

Keybindings

Key Action
Enter Connect to the selected command
a Add a new command
e Edit the selected command
d Delete the selected command
u Upload a file to the host through scp
/ k Move selection up
/ j Move selection down
q / Esc / Ctrl+C Quit

Configuration

Connections are stored as TOML at ~/.config/sshmngrs.conf. This is an example:

[[commands]]
alias = "kirbylife-lab (Podman)"
command = "ssh noroot@localhost:123"

[[commands]]
alias = "kirbylife-router"
command = "ssh root@192.168.100.1"

The command can be any shell command, so anything you would type in your shell works:

  • Extra ssh flags
  • Custom ssh paths
  • scp
  • Jump shosts
  • Aliases from your ~/.ssh/config
  • Etc...

Importing from sshch

If you come from sshch, the INI config at ~/.config/sshch.conf can be converted to the sshmngrs format with this one-liner. Each exec_string becomes a command; groups and stored passwords are ignored.

awk 'function esc(s){gsub(/\\/,"\\\\",s);gsub(/"/,"\\\"",s);return s} /^\[/{gsub(/^\[|\]$/,"");a=$0;next} /^exec_string[ \t]*=/{sub(/^exec_string[ \t]*=[ \t]*/,"");printf "[[commands]]\nalias = \"%s\"\ncommand = \"%s\"\n\n",esc(a),esc($0)}' ~/.config/sshch.conf > ~/.config/sshmngrs.conf