Add the README.md file

main
kirbylife 2026-07-25 01:20:58 -06:00
parent 31d13507fe
commit 6bbd9fb5f8
1 changed files with 83 additions and 0 deletions

83
README.md 100644
View File

@ -0,0 +1,83 @@
# 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 |
| `↑` / `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
```