# sshmngrs A fast and simple SSH connection manager in a terminal UI, built in Rust and [ratatui](https://ratatui.rs). ## 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`. ```bash # Run from source cargo run --release # Or install the binary cargo install --path . # Or from crates.io cargo install sshmngrs ``` ## Usage Launch the app: ```Bash 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: ```toml [[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](https://gitlab.com/zlax/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. ```bash 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 ```