A cross-platform GUI application for managing SSH tunnels, built with PySide6.
- π Manage multiple SSH tunnels from a single interface
βΆοΈ Start/stop tunnels with one click- π Auto-open URLs in browser when tunnel starts
- π¨ Custom icons per tunnel
- πΎ Configuration backup on save (keeps last 10 backups)
- π Single instance enforcement
Pre-built binaries are available for:
- πͺ Windows (x64)
- π§ Linux (x64)
- π macOS (Apple Silicon)
Download the latest release from the Releases page.
πͺ Windows: Double-click ssh-tunnel-manager.exe to run.
π§ Linux:
chmod +x ssh-tunnel-manager
./ssh-tunnel-managerπ macOS:
chmod +x ssh-tunnel-manager
./ssh-tunnel-managerOn macOS, you may see a security warning saying the app "cannot be opened because the developer cannot be verified". To allow it:
- Open System Settings β Privacy & Security
- Scroll down and click Open Anyway next to the blocked app message
β³ Note: The first launch may take a few seconds as the app extracts its bundled resources. This is normal for static binaries.
# Install dependencies
pip install -r requirements.txt
# Compile UI and resource files
make
# Create your configuration
cp config.example.yml config.yml
# Run the application
python3 app.pyEdit sshtunnelmgr.desktop with your paths and copy it to create an application menu entry:
cp sshtunnelmgr.desktop ~/.local/share/applications/Tunnels are configured in config.yml. See config.example.yml for the format.
rabbitmq:
remote_address: 10.10.10.30:15672
proxy_host: demo-bastion
local_port: 15672
browser_open: http://127.0.0.1This creates a tunnel equivalent to:
ssh -L 127.0.0.1:15672:10.10.10.30:15672 demo-bastion| Key | Required | Description |
|---|---|---|
remote_address |
Yes | Target host:port to tunnel to |
proxy_host |
Yes | SSH bastion/jump host |
local_port |
Yes | Local port to bind |
browser_open |
No | URL to open when tunnel starts (local_port is appended automatically) |
Place image files (PNG/JPG/BMP) in the ./icons/ directory with the same name as the tunnel identifier.
For example, for a tunnel named kubernetes, place an icon at ./icons/kubernetes.png.
Binding to ports below 1024 requires elevated privileges. On Linux/macOS, you can grant this capability to SSH:
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/bin/sshIf migrating from older versions, change local_address to local_port in your config and ensure it's a number (not a string).
- Gracefully close SSH sessions instead of using
kill - Add/edit/delete tunnels via the GUI
- Icons may not be visible in static builds
