Managing multiple SSH servers shouldn't require juggling terminal tabs, remembering IP addresses, or running the same commands over and over. OmnySSH brings dashboard-style monitoring, visual file management, and command automation into a single, lightweight TUI.
Stop switching between tools. Start managing smarter.
| Traditional Workflow | With OmnySSH |
|---|---|
| Open 10 terminal tabs for 10 servers | Single dashboard with all servers visible |
ssh user@192.168.1.10 → top → note CPU |
Live CPU/RAM/Disk metrics on cards |
scp -r local/ user@host:/remote/ |
Drag-and-drop file manager (local ↔ remote) |
| Paste the same deploy command everywhere | Save as snippet, broadcast to all hosts |
tmux for multi-session SSH |
Built-in tabs + split-view terminal |
Server cards with real-time CPU, RAM, and disk usage. Color-coded thresholds (green → yellow → red) make it easy to spot issues at a glance.
Split-panel SFTP browser (local ↔ remote) with progress bars, multi-selection, and intuitive keyboard shortcuts. No more memorizing scp syntax.
Save frequently-used commands and execute them on any server with one keypress. Broadcast a command to multiple hosts simultaneously.
PTY tabs and split-view for working on several servers at once. Switch between hosts without leaving the app.
Find any host or snippet instantly. Type a few letters, get instant results.
Choose from Default, Dracula, Nord, or Gruvbox. Switch themes on the fly with --theme.
Remap global shortcuts in one TOML file. Make OmnySSH work the way you work.
Linux, macOS, Windows. Single static binary, no runtime dependencies.
| Feature | OmnySSH | plain SSH | Termius | tmux + ssh |
|---|---|---|---|---|
| TUI interface | ✅ | ❌ | ✅ (GUI) | ✅ |
| Live metrics dashboard | ✅ | ❌ | ✅ | ❌ |
| Visual file manager (SFTP) | ✅ | ❌ | ✅ | ❌ |
| Command snippets | ✅ | ❌ | ✅ | ❌ |
| Multi-session tabs | ✅ | ❌ | ✅ | ✅ |
| Fuzzy search | ✅ | ❌ | ✅ | ❌ |
| Configurable themes | ✅ | ❌ | ✅ | |
| Open source | ✅ | ✅ | ❌ | ✅ |
| Free | ✅ | ✅ | 💰 | ✅ |
| Runs in terminal | ✅ | ✅ | ❌ | ✅ |
| Single binary | ✅ | ✅ | ❌ | ❌ |
One command to install on Linux/macOS:
curl -fsSL https://raw.githubusercontent.com/timhartmann7/omnyssh/main/install.sh | shThis script auto-detects your OS and architecture, downloads the latest release, and installs it to your PATH.
brew install timhartmann7/tap/omnysshDownload from the Releases page:
| Platform | Archive |
|---|---|
| Linux x86_64 | omny-x86_64-unknown-linux-gnu.tar.gz |
| Linux ARM64 | omny-aarch64-unknown-linux-gnu.tar.gz |
| macOS Intel | omny-x86_64-apple-darwin.tar.gz |
| macOS Apple Silicon | omny-aarch64-apple-darwin.tar.gz |
| Windows x86_64 | omny-x86_64-pc-windows-msvc.zip |
Extract and move the binary to your PATH:
tar -xzf omny-*.tar.gz
sudo mv omny /usr/local/bin/cargo install omnysshgit clone https://github.com/timhartmann7/omnyssh.git
cd omnyssh
cargo build --release
# Binary at: ./target/release/omny-
Install OmnySSH (see above)
-
Run the app:
omny
-
Add your first server:
- Press
ain the dashboard - Enter hostname, user, and SSH key path
- Press
Enterto connect
- Press
-
Try different themes:
omny --theme dracula omny --theme nord omny --theme gruvbox
-
View full documentation:
man omny # Man page with all options omny --help # Quick reference
-
Explore features:
1— Dashboard (live metrics)2— File Manager (SFTP browser)3— Snippets (saved commands)4— Terminal (multi-session)/— Fuzzy search?— Help popup
man omnyomny [OPTIONS]
Options:
-c, --config <FILE> Path to a custom config file
-t, --theme <THEME> Override the color theme (default | dracula | nord | gruvbox)
-v, --verbose Enable debug logging (written to stderr)
-h, --help Print help
-V, --version Print version
Config files live in:
- Linux/macOS:
~/.config/omnyssh/ - Windows:
%APPDATA%\omnyssh\
| File | Purpose |
|---|---|
config.toml |
App settings, theme, keybindings |
hosts.toml |
Managed host list |
snippets.toml |
Saved commands |
The original ~/.ssh/config is never modified — hosts are imported read-only at startup.
[general]
refresh_interval = 30 # seconds between metric refreshes
default_shell = "/bin/bash"
ssh_command = "ssh" # path to system SSH binary
max_concurrent_connections = 10
[ui]
theme = "default" # default | dracula | nord | gruvbox
show_ip = true
show_uptime = true
card_layout = "grid" # grid | list
border_style = "rounded" # rounded | plain | double
[keybindings]
quit = "q"
search = "/"
connect = "Enter"
dashboard = "1"
file_manager = "2"
snippets = "3"[[hosts]]
name = "web-prod-1"
hostname = "192.168.1.10"
user = "deploy"
port = 22
identity_file = "~/.ssh/id_ed25519"
tags = ["production", "web"]
notes = "Main web server. Nginx + Node.js"
[[hosts]]
name = "db-master"
hostname = "10.0.0.50"
user = "admin"
port = 2222
tags = ["production", "database"]
notes = "PostgreSQL 16. Don't restart without warning #backend"[[snippets]]
name = "Docker: restart all"
command = "cd /opt/app && docker compose down && docker compose up -d"
scope = "global"
tags = ["docker"]
[[snippets]]
name = "Restart service"
command = "sudo systemctl restart {{service_name}}"
scope = "global"
params = ["service_name"]| Theme | Description |
|---|---|
default |
Neutral blue/cyan — works with any terminal palette |
dracula |
Purple, pink, green — Dracula |
nord |
Arctic blues and teals — Nord |
gruvbox |
Warm amber and orange — Gruvbox |
Set the theme permanently in config.toml or temporarily via the --theme flag.
| Version | Stage | Description |
|---|---|---|
0.0.1 |
0 | Project skeleton — TUI shell with placeholder screens |
0.1.0 |
1 | Host list, SSH connect, fuzzy search — MVP |
0.2.0 |
2 | Live metrics dashboard |
0.3.0 |
3 | Snippets & quick-execute |
0.4.0 |
4 | SFTP file manager |
0.5.0 |
5 | Multi-session tabs & split-view |
1.0.0 |
6 | Polish, themes, configurable keybindings — current ✅ |
Contributions are welcome! Please read CONTRIBUTING.md for development setup, code conventions, and the PR checklist.
Apache 2.0 — see LICENSE.
