Features β’ Installation β’ Quick Start β’ Documentation β’ Contributing
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.
Press Shift+K on a password-based host to generate an Ed25519 key, install it in the server's authorized_keys, and switch the host to key authentication. After verifying the key works, it can disable password login on the server β with an automatic sshd_config backup and rollback if anything fails.
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 with --theme, which saves your choice to config.toml.
Remap global shortcuts in one TOML file. Make OmnySSH work the way you work.
Linux, macOS, Windows. Single self-contained binary β no runtime or interpreter to install.
| 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 (static, incl. Termux) | omny-aarch64-unknown-linux-musl.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/omnyA flake.nix is provided for Nix users who want a
reproducible build, app entry point, and development shell. Enable flakes first
if your Nix installation does not already do so
(experimental-features = nix-command flakes in ~/.config/nix/nix.conf).
Run without installing:
nix run github:timhartmann7/omnyssh
nix run github:timhartmann7/omnyssh -- --theme draculaBuild a local checkout:
git clone https://github.com/timhartmann7/omnyssh.git
cd omnyssh
nix build # binary at ./result/bin/omny
./result/bin/omny --versionInstall into your user profile:
nix profile install github:timhartmann7/omnysshDevelop with a pinned toolchain:
nix develop # drops you into a shell with rustc, cargo, clippy,
# rustfmt, rust-analyzer, and all build inputs ready
cargo buildValidate the flake:
nix flake check # builds, formats, lints, and tests the workspaceThe flake exposes:
packages.defaultandpackages.omnysshfor theomnybinary plus man pageapps.defaultfornix runchecksfor the package build, rustfmt, clippy, and workspace testsdevShells.defaultfor day-to-day Rust development
It evaluates cleanly across x86_64-linux, aarch64-linux, x86_64-darwin,
and aarch64-darwin.
-
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 searchShift+Kβ Set up SSH key auth on the selected host?β 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 a log file)
-h, --help Print help
-V, --version Print version
Config files live in the native OS config directory:
| OS | Path |
|---|---|
| Linux | ~/.config/omnyssh/ (or $XDG_CONFIG_HOME/omnyssh/) |
| macOS | ~/Library/Application Support/omnyssh/ |
| Windows | %APPDATA%\omnyssh\ |
| Termux (Android) | ~/.config/omnyssh/ |
On macOS the path contains a space, so quote it in the shell:
ls ~/Library/'Application Support'/omnyssh/
| File | Purpose |
|---|---|
config.toml |
App settings, theme, keybindings |
hosts.toml |
Managed host list |
snippets.toml |
Saved commands |
omnyssh.log.YYYY-MM-DD |
Daily rolling log file |
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
[keybindings]
quit = "q"
search = "/"
dashboard = "F1"
file_manager = "F2"
snippets = "F3"
next_screen = "Tab" # cycle dashboard β files β snippets β terminal
next_tab = "Tab" # next terminal tab (or pane focus when split)
[update]
check_on_startup = true # check GitHub Releases for a newer version on startup
skip_version = "" # a version to skip; set when you choose "Skip this version"[[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 in config.toml, or pass --theme once β it is written back to config.toml and persists on the next run.
| 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.4 |
6 | Polish, themes, configurable keybindings |
1.0.5 |
6 | Dead-code cleanup, docs.rs build fix |
1.1.0 |
6 | Cargo workspace β frontend-agnostic omnyssh-core crate β current β
|
Contributions are welcome! Please read CONTRIBUTING.md for development setup, code conventions, and the PR checklist.
The repository is a cargo workspace: the frontend-agnostic engine lives in
crates/omnyssh-core, and the TUI application (binary omny) lives in
crates/omnyssh.
Apache 2.0 β see LICENSE.
Report Bug β’ Request Feature β’ Discussions
