Lazyssh is a terminal-based interactive SSH manager designed to simplify server management and secure shell (SSH) connections directly from your terminal. Built with inspiration from tools like lazydocker and k9s, Lazyssh streamlines workflows by reading, displaying, and managing servers defined in your ~/.ssh/config file.
Key Features:
Server Management: Read, display, add, edit, and delete server entries directly from a scrollable list interface.
Fuzzy Search & Quick Access: Use fuzzy search to find servers by alias, IP, or tags, with one-key SSH access for quick connections.
Advanced Configuration: Configure port forwarding, connection multiplexing, authentication methods, and security settings through a tabbed interface.
Tagging & Sorting: Organize servers using tags (e.g., prod, dev) and sort by alias or last SSH activity.
Ping & Status Checks: Verify server availability with a simple ping command.
Audience & Benefit:
Ideal for DevOps engineers, system administrators, and developers managing multiple servers. Lazyssh enhances productivity by reducing the need to remember IP addresses or run complex commands, offering a clean, keyboard-driven interface for seamless navigation and efficient SSH management.
Lazyssh can be installed via winget, making it accessible for users seeking a streamlined approach to server administration.
README
Lazyssh is a terminal-based, interactive SSH manager inspired by tools like lazydocker and k9s — but built for managing your fleet of servers directly from your terminal.
With lazyssh, you can quickly navigate, connect, manage, and transfer files between your local machine and any server defined in your ~/.ssh/config. No more remembering IP addresses or running long scp commands — just a clean, keyboard-driven UI.
✨ Features
Server Management
📜 Read & display servers from your ~/.ssh/config in a scrollable list.
➕ Add a new server from the UI with comprehensive SSH configuration options.
✏ Edit existing server entries directly from the UI with a tabbed interface.
🗑 Delete server entries safely.
📌 Pin / unpin servers to keep favorites at the top.
🏓 Ping server to check status.
Quick Server Navigation
🔍 Fuzzy search by alias, IP, or tags.
🖥 One‑keypress SSH into the selected server (Enter).
🏷 Tag servers (e.g., prod, dev, test) for quick filtering.
↕️ Sort by alias or last SSH (toggle + reverse).
Advanced SSH Configuration
🔗 Port forwarding (LocalForward, RemoteForward, DynamicForward).
🚀 Connection multiplexing for faster subsequent connections.
All SSH connections are executed through your system’s native ssh binary (OpenSSH).
Private keys, passwords, and credentials are never stored, transmitted, or modified by lazyssh.
Your existing IdentityFile paths and ssh-agent integrations work exactly as before.
lazyssh only reads and updates your ~/.ssh/config. A backup of the file is created automatically before any changes.
File permissions on your SSH config are preserved to ensure security.
🛡️ Config Safety: Non‑destructive writes and backups
Non‑destructive edits: lazyssh only writes the minimal required changes to your ~/.ssh/config. It uses a parser that preserves existing comments, spacing, order, and any settings it didn’t touch. Your handcrafted comments and formatting remain intact.
Atomic writes: updates are written to a temporary file and then atomically renamed over the original, minimizing the risk of partial writes.
Backups:
One‑time original backup: before lazyssh makes its first change, it creates a single snapshot named config.original.backup beside your SSH config. If this file is present, it will never be recreated or overwritten.
Rolling backups: on every subsequent save, lazyssh also creates a timestamped backup named like: ~/.ssh/config--lazyssh.backup. The app keeps at most 10 of these backups, automatically removing the oldest ones.
📷 Screenshots
🚀 Startup
Clean loading screen when launching the app
📋 Server Management Dashboard
Main dashboard displaying all configured servers with status indicators, pinned favorites at the top, and easy navigation
🔎 Search
Fuzzy search functionality to quickly find servers by name, IP address, or tags
➕ Add/Edit Server
Tabbed interface for managing SSH connections with extensive configuration options organized into:
Download from GitHub Releases. You can use the snippet below to automatically fetch the latest version for your OS/ARCH (Darwin/Linux and amd64/arm64 supported):
# Detect latest version
LATEST_TAG=$(curl -fsSL https://api.github.com/repos/Adembc/lazyssh/releases/latest | jq -r .tag_name)
# Download the correct binary for your system
curl -LJO "https://github.com/Adembc/lazyssh/releases/download/${LATEST_TAG}/lazyssh_$(uname)_$(uname -m).tar.gz"
# Extract the binary
tar -xzf lazyssh_$(uname)_$(uname -m).tar.gz
# Move to /usr/local/bin or another directory in your PATH
sudo mv lazyssh /usr/local/bin/
# enjoy!
lazyssh
Option 3: Build from Source
# Clone the repository
git clone https://github.com/Adembc/lazyssh.git
cd lazyssh
# Build for macOS
make build
./bin/lazyssh
# Or Run it directly
make run
⌨️ Key Bindings
Key
Action
/
Toggle search bar
↑↓/jk
Navigate servers
Enter
SSH into selected server
c
Copy SSH command to clipboard
g
Ping selected server
r
Refresh background data
a
Add server
e
Edit server
t
Edit tags
d
Delete server
p
Pin/Unpin server
s
Toggle sort field
S
Reverse sort order
q
Quit
In Server Form:
Key
Action
Ctrl+H
Previous tab
Ctrl+L
Next tab
Ctrl+S
Save
Esc
Cancel
Tip: The hint bar at the top of the list shows the most useful shortcuts.
🤝 Contributing
Contributions are welcome!
If you spot a bug or have a feature request, please open an issue.
If you'd like to contribute, fork the repo and submit a pull request ❤️.
We love seeing the community make Lazyssh better 🚀
Semantic Pull Requests
This repository enforces semantic PR titles via an automated GitHub Action. Please format your PR title as:
type(scope): short descriptive subject
Notes:
Scope is optional and should be one of: ui, cli, config, parser.
Allowed types in this repo:
feat: a new feature
fix: a bug fix
improve: quality or UX improvements that are not a refactor or perf
refactor: code change that neither fixes a bug nor adds a feature
docs: documentation only changes
test: adding or refactoring tests
ci: CI/CD or automation changes
chore: maintenance tasks, dependency bumps, non-code infra
revert: reverts a previous commit
Examples:
feat(ui): add server pinning and sorting options
fix(parser): handle comments at end of Host blocks
improve(cli): show friendly error when ssh binary missing
refactor(config): simplify backup rotation logic
docs: add installation instructions for Homebrew
ci: cache Go toolchain and dependencies
Tip: If your PR touches multiple areas, pick the most relevant scope or omit the scope.
⭐ Support
If you find Lazyssh useful, please consider giving the repo a star ⭐️ and join stargazers.