SSHM is a beautiful command-line tool that transforms how you manage and connect to your SSH hosts. Built with Go and featuring an intuitive TUI interface, it m
SSHM is a beautiful command-line tool that transforms how you manage and connect to your SSH hosts. Built with Go and featuring an intuitive TUI interface, it m
A modern, interactive SSH Manager for your terminal
SSHM is a beautiful command-line tool that transforms how you manage and connect to your SSH hosts. Built with Go and featuring an intuitive TUI interface, it makes SSH connection management effortless and enjoyable.
️ Click on the image to view in full sizesshm hidden tag to exclude hosts from the list while keeping them connectable~/.ssh/config file-c flagHomebrew (Recommended for macOS):
brew install Gu1llaum-3/sshm/sshmUnix/Linux/macOS (One-line install):
curl -sSL https://raw.githubusercontent.com/Gu1llaum-3/sshm/main/install/unix.sh | bashWindows (PowerShell):
irm https://raw.githubusercontent.com/Gu1llaum-3/sshm/main/install/windows.ps1 | iexAlternative methods:
Linux/macOS:
# Download specific release
wget https://github.com/Gu1llaum-3/sshm/releases/latest/download/sshm-linux-amd64.tar.gz
# Extract and install
tar -xzf sshm-linux-amd64.tar.gz
sudo mv sshm-linux-amd64 /usr/local/bin/sshmWindows:
# Download and extract
Invoke-WebRequest -Uri "https://github.com/Gu1llaum-3/sshm/releases/latest/download/sshm-windows-amd64.zip" -OutFile "sshm-windows-amd64.zip"
Expand-Archive sshm-windows-amd64.zip -DestinationPath C:\tools\
# Add C:\tools to your PATH environment variableLaunch SSHM without arguments to enter the beautiful TUI interface:
sshmNavigation:
↑/↓ or j/k - Navigate hostsEnter - Connect to selected hosta - Add new hoste - Edit selected hostd - Delete selected hostm - Move host to another config file (requires SSH Include directives)f - Port forwarding setupH - Toggle hidden hosts visibilityq - Quit/ - Search/filter hostsReal-time Status Indicators:
Sorting & Filtering:
s - Switch between sorting modes (name ↔ last login)n - Sort by name (alphabetical)r - Sort by recent (last login time)Tab - Cycle between filtering modesThe interactive forms will guide you through configuration:
-o format (e.g., -o Compression=yes -o ServerAliveInterval=60)SSHM provides an intuitive interface for setting up SSH port forwarding. Press f while selecting a host to open the port forwarding setup:
Forward Types:
Local (-L) - Forward a local port to a remote host/port through the SSH connection
localhost:5432 via local port 15432ssh -L 15432:localhost:5432 server → Database accessible on localhost:15432Remote (-R) - Forward a remote port back to a local host/port
8080ssh -R 8080:localhost:3000 server → Local app accessible from remote host's port 8080GatewayPorts yes to /etc/ssh/sshd_config and restart SSH serviceufw allow 8080 or equivalent)0.0.0.0 for external access, 127.0.0.1 for local-onlyDynamic (-D) - Create a SOCKS proxy for secure browsing
ssh -D 1080 server → Configure browser to use localhost:1080 as SOCKS proxy127.0.0.1 for security (local access only)Port Forwarding Interface:
Troubleshooting Port Forwarding:
Remote Forwarding Issues:
# Error: "remote port forwarding failed for listen port X"
# Solutions:
1. Check if port is already in use: ssh server "netstat -tln | grep :X"
2. Use a different port that's available
3. Enable GatewayPorts in SSH config for external accessSSH Server Configuration for Remote Forwarding:
# Edit SSH daemon config on the server:
sudo nano /etc/ssh/sshd_config
# Add or uncomment:
GatewayPorts yes
# Restart SSH service:
sudo systemctl restart sshd # Ubuntu/Debian/CentOS 7+
# OR
sudo service ssh restart # Older systemsFirewall Configuration:
# Ubuntu/Debian (UFW):
sudo ufw allow [port_number]
# CentOS/RHEL/Rocky (firewalld):
sudo firewall-cmd --add-port=[port_number]/tcp --permanent
sudo firewall-cmd --reload
# Check if port is accessible:
telnet [server_ip] [port_number]Dynamic Forwarding (SOCKS) Browser Setup:
Firefox: about:preferences → Network Settings
- Manual proxy configuration
- SOCKS Host: localhost, Port: [your_port]
- SOCKS v5: ✓
- Proxy DNS when using SOCKS v5: ✓
Chrome: Launch with proxy
chrome --proxy-server="socks5://localhost:[your_port]"SSHM provides both command-line operations and an interactive TUI interface:
…sshm info prints a single JSON object to stdout so you can script against it with jq.
# Extract fields
sshm info prod-server | jq -r '.result.target.hostname'
sshm info prod-server | jq -r '.result.target.port'
# Check not-found (exit code 2)
sshm info does-not-exist | jq -r '.error.code'SSHM supports shell completion for host names, making it easy to connect to hosts without typing full names:
sshm # Lists all available hosts
sshm pro # Completes to hosts starting with "pro" (e.g., prod-server)Setup Instructions:
Bash:
# Enable for current session
source > ~/.bashrcZsh:
# Enable for current session
source > ~/.zshrcFish:
# Enable for current session
sshm completion fish | source
# Enable permanently
sshm completion fish > ~/.config/fish/completions/sshm.fishPowerShell:
# Enable for current session
sshm completion powershell | Out-String | Invoke-Expression
# Enable permanently (add to your PowerShell profile)
Add-Content $PROFILE 'sshm completion powershell | Out-String | Invoke-Expression'SSHM supports direct connection to hosts via the command line, making it easy to integrate into your existing workflow:
# Connect directly to any configured host
sshm production-server
sshm db-staging
sshm web-01
# All direct connections are tracked in your history
# Use the TUI to see your most recently connected hostsFeatures of Direct Connection:
-c flagExecute commands on remote hosts without opening an interactive shell:
# Execute a single command
sshm prod-server uptime
# Execute command with arguments
sshm prod-server ls -la /var/log
# Check disk usage
sshm prod-server df -h
# View logs (pipe to local commands)
sshm prod-server 'cat /var/log/nginx/access.log' | grep 404
# Force TTY allocation for interactive commands (sudo, vim, etc.)
sshm -t prod-server sudo systemctl restart nginxFeatures:
-t flag for commands requiring terminal interactionSSHM automatically creates backups of your SSH configuration files before making any changes to ensure your configurations are safe.
Backup Location:
~/.config/sshm/backups/ (or $XDG_CONFIG_HOME/sshm/backups/ if set)%APPDATA%\sshm\backups\ (fallback: %USERPROFILE%\.config\sshm\backups\)Key Features:
Additional Storage:
Quick Recovery:
# Unix/Linux/macOS
cp ~/.config/sshm/backups/config.backup ~/.ssh/config
# Windows
copy "%APPDATA%\sshm\backups\config.backup" "%USERPROFILE%\.ssh\config"By default, SSHM uses the standard SSH configuration file at ~/.ssh/config. You can specify a different configuration file using the -c flag:
``
No open issues yet, or sync has not completed.