boring

module
v0.0.0-...-deb6cd9 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 18, 2025 License: BSD-3-Clause, MIT

README

The boring tunnel manager

Static Badge GitHub Release Go Report Card Static Badge

A simple command line SSH tunnel manager that just works.

Screenshot

Features

  • 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

Usage:
  boring list, l                List all tunnels
  boring open, o (-a | <patterns>...)
    <patterns>...               Open tunnels matching any glob pattern
    -a, --all                   Open all tunnels
  boring close, c               Close tunnels (same options as 'open')
  boring edit, e                Edit the configuration file
  boring version, v             Show the version number

Configuration

By default, boring reads its configuration from ~/.boring.toml on macOS and Windows, and from $XDG_CONFIG_HOME/boring/.boring.toml on Linux. If $XDG_CONFIG_HOME is not set, it defaults to ~/.config. The location of the config file can be overriden by setting $BORING_CONFIG. The config 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:

Option Description
name Alias for the tunnel. Required.
local Local address. Can be a "$host:$port" network address or a Unix socket. Can be abbreviated as "$port" in local and socks modes. Required in local, remote and socks modes.
remote Remote address. As above, but can be abbreviated in remote and socks-remote modes. Required in local, remote and socks-remote modes.
host Either a host alias that matches SSH configs or the actual hostname. Required.
mode Mode of the tunnel. Can be either "local", "remote", "socks" or "socks-remote". Default is "local".
user SSH user. If not set, tries to read it from SSH config, defaulting to $USER.
identity SSH identity file. If not set, tries to read it from SSH config and ssh-agent, defaulting to standard identity files.
port SSH port. If not set, tries to read it from SSH config, defaulting to 22.

Installation

Homebrew
brew install boring
Pre-built

Get one of the pre-built binaries from the releases page. Then move the binary to a location in your $PATH.

Build 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 via
git clone https://github.com/alebeck/boring && cd boring
.\build_win.bat

Then, move the executable to a location in your %PATH%.

Shell completion

Shell completion scripts are available for bash, zsh, and fish.

If boring was installed via Homebrew, and you have Homebrew completions enabled, nothing needs to be done.

Otherwise, install completions by adding the following to your shell's config file:

Bash
eval "$(boring --shell bash)"
Zsh
source <(boring --shell zsh)
Fish
boring --shell fish | source

Directories

Path Synopsis
cmd
internal
ipc
log

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL
JackTT - Gopher 🇻🇳