3 unstable releases
Uses new Rust 2024
| 0.2.0 | Feb 21, 2026 |
|---|---|
| 0.1.1 | Feb 21, 2026 |
| 0.1.0 | Feb 21, 2026 |
#1024 in Network programming
70KB
2K
SLoC
sesh
A fast, minimal SSH connection manager for VPS hosts. Store, tag, and connect to your servers from the command line.
Installation
From crates.io
cargo install sesh-ssh
From source
Requires the Rust nightly toolchain.
git clone https://github.com/roushou/sesh.git
cd sesh
cargo install --path .
From GitHub releases
Download a prebuilt binary from the releases page and place it somewhere on your PATH.
Quick start
# Import hosts from your SSH config
sesh import
# Connect (saves then connects)
sesh connect web-1 --host 203.0.113.10 --user root --port 2222 --tags prod,web --provider hetzner
# Connect to known host
sesh connect web-1
# List all hosts
sesh list
Commands
sesh add <name>
Add a host entry manually.
| Flag | Description | Default |
|---|---|---|
--host |
Hostname or IP (required) | |
--user |
SSH user | |
--port |
SSH port | 22 |
--identity-file |
Path to private key (-i) |
|
--tags |
Comma-separated tags | |
--provider |
Provider label (e.g. hetzner) |
sesh edit <name>
Edit an existing host entry.
| Flag | Description | Default |
|---|---|---|
--rename |
Rename entry | |
--host |
Update hostname or IP | |
--user |
Set SSH user | |
--clear-user |
Remove SSH user | |
--port |
Update SSH port | |
--identity-file |
Set private key path (-i) |
|
--clear-identity-file |
Remove private key path | |
--tags |
Comma-separated tags (replaces all tags) | |
--clear-tags |
Remove all tags | |
--provider |
Set provider label | |
--clear-provider |
Remove provider label |
sesh remove <name>
Remove an existing host entry.
sesh import
Import host entries from an SSH config file.
| Flag | Description | Default |
|---|---|---|
--file |
Path to SSH config | ~/.ssh/config |
--overwrite |
Replace existing entries with imported values | |
--provider |
Provider label for all imported entries | |
--tags |
Comma-separated tags for all imported entries |
sesh list
List stored host entries in a table.
| Flag | Description |
|---|---|
--tag |
Filter by tag |
--provider |
Filter by provider |
sesh connect <target>
Connect using system ssh.
- If
<target>matches a stored entry name, it connects directly. - If
<target>does not exist, you can auto-add and save in one command:sesh connect <name> --host <hostname>sesh connect user@host(saved underhostunless--save-asis set)
| Flag | Description | Default |
|---|---|---|
--host |
Hostname/IP for one-command auto-add | |
--user |
SSH user for auto-add | |
--port |
SSH port for auto-add | 22 |
--identity-file |
Private key path for auto-add (-i) |
|
--tags |
Comma-separated tags for auto-add | |
--provider |
Provider label for auto-add | |
--save-as |
Entry name to save auto-added destination under | |
--dry-run |
Print the SSH command without running |
sesh doctor [name]
Run environment and host health checks. Verifies that ssh is available, the store file exists, and that hosts are reachable over TCP with a valid SSH banner.
| Flag | Description | Default |
|---|---|---|
--timeout-ms |
TCP/banner timeout in ms | 1500 |
Storage
Host entries are stored in ~/.config/sesh/hosts.toml.
version = 1
[[hosts]]
name = "web-1"
host = "203.0.113.10"
user = "root"
port = 2222
identity_file = "/home/me/.ssh/id_ed25519"
tags = ["prod", "web"]
provider = "hetzner"
License
MIT
Dependencies
~1.5–2.3MB
~43K SLoC