A simple & reliable command line SSH tunnel manager.
- Ultra lightweight and fast
- Local, remote and dynamic (SOCKS5) port forwarding
- Compatible with SSH config and
ssh-agent
- Supports Unix sockets
- Automatic reconnection and keep-alives
- Human-friendly configuration via TOML
Usage:
boring list,l List tunnels
boring open,o <name1> [<name2> ...] Open specified tunnel(s)
boring close,c <name1> [<name2> ...] Close specified tunnel(s)
By default, boring
reads its configuration from ~/.boring.toml
. The configuration is a simple TOML file describing your tunnels:
# simple tunnel
[[tunnels]]
name = "dev"
local = "9000"
remote = "localhost:9000"
host = "dev-server" # automatically matches host against SSH config
# example of an explicit host (no SSH config)
[[tunnels]]
name = "prod"
local = "5001"
remote = "localhost:5001"
host = "prod.example.com"
user = "root"
identity = "~/.ssh/id_prod" # will try default ones if not set
# ... more tunnels
Currently, supported options are: name
, local
, remote
, host
, user
, identity
, port
, and mode
. host
either describes a host which to match SSH configs to, or if no matches found, the actual hostname. mode
can be 'local' for local, 'remote' for remote and "socks" for dynamic forwarding; default is 'local'. The location of the config file can be changed by setting the BORING_CONFIG
environment variable.
Get one of the pre-built binaries from the releases page or build it yourself:
git clone https://github.com/alebeck/boring && cd boring
./build.sh
Then, move the binary to a location in your $PATH
.
Note for Windows users
Windows is fully supported since release 0.6.0. Users currently have to build from source, which is very easy. Make sure Go >= 1.23.0 is installed and then compile viagit clone https://github.com/alebeck/boring && cd boring
.\build_win.bat
Then, move the executable to a location in your %PATH%
.