Modern SSH Tunnel Management
A modern, secure SSH tunnel manager with a clean Swing GUI.
Build, manage and auto-reconnect local, remote and dynamic port forwarding tunnels through an intuitive desktop interface.
| Feature | Description |
|---|---|
| Port Forwarding | Local, remote and dynamic (SOCKS) tunneling |
| Auto-Reconnect | Resilient reconnection with exponential backoff |
| Secure Credentials | AES-GCM encryption with a persisted, owner-only key file |
| YAML Configuration | Human-readable, declarative config |
| Modern GUI | FlatLaf theming with dark & light modes |
| Identity Management | Reusable SSH identities with password or key authentication |
# 1. Clone
git clone https://github.com/mjoe/burrow.git
cd burrow
# 2. Build (uses Maven Wrapper - no manual Maven install needed)
./mvnw clean package
# 3. Run
./burrow.sh # macOS / Linux
burrow.bat # Windows- Java 21+ — Eclipse Temurin
The bundled Maven Wrapper (./mvnw)
downloads the required Maven version automatically. You only need a system
Maven if you prefer using mvn directly.
Burrow reads its configuration from ~/.burrow/config.yaml. You can also
load a file at runtime via the GUI (File → Load Configuration).
identities:
- id: id-1
alias: My Server
username: admin
keyFile: /home/user/.ssh/id_ed25519
connections:
- id: conn-1
alias: Home Server
host: home.example.com
port: 22
identityId: id-1
autoStart: true
autoReconnect: true
forwards:
- id: fwd-1
type: local
alias: Web App
connectionId: conn-1
localHost: 127.0.0.1
localPort: 8080
remoteHost: 127.0.0.1
remotePort: 80Note: Stored passwords are encrypted with an AES key persisted at
~/.burrow/secret.key(owner-only permissions). Never share this file — without it, stored passwords cannot be decrypted.
Burrow is a multi-module Maven project:
| Module | Responsibility |
|---|---|
burrow-core |
Domain models, SSH logic, configuration, security |
burrow-gui |
Swing desktop application |
Design principles:
- Immutable records with builder patterns for type-safe models
- Sealed hierarchies for well-defined port-forwarding types
- Core logic cleanly separated from the GUI layer
- Secure credentials by default, never hardcoded keys
Burrow uses two-position versioning (Major.Minor, e.g. 1.0, 1.1).
Releases are published as GitHub Releases
with a pre-built runnable fat-JAR.
To cut a release, push a tag (the CI builds the jar and creates the release automatically):
git tag v1.0
git push origin v1.0Contributions are welcome! Please read CONTRIBUTING.md before submitting issues or pull requests.
- Original project: jentunnel by ggrandes
- SSH: Apache Mina SSHD
- GUI: FlatLaf