Вы настроили SSH-туннель, отошли на час, вернулись, а соединение упало. Поднимаете снова вручную. Через день история повторяется. Если туннелей несколько, это превращается в рутину.
boring решает именно это. Он держит туннели живыми, переподключает их автоматически и управляет всем через один TOML-файл.Что умеет
Поддерживает три режима проброса портов: локальный, удалённый и динамический через SOCKS5. Работает с
~/.ssh/config и ssh-agent, если хост уже описан там, достаточно указать его имя. Умеет работать с Unix-сокетами. Есть автодополнение для bash, zsh и fish.Бинарник появится в папке
dist. Его нужно переложить в любую директорию из $PATH.Пример конфига с двумя туннелями:
# туннель к dev-серверу, хост берётся из SSH config
[[tunnels]]
name = "dev"
local = "9000"
remote = "localhost:9000"
host = "dev-server"
# туннель к prod с явными параметрами
[[tunnels]]
name = "prod"
local = "5001"
remote = "localhost:5001"
host = "prod.example.com"
user = "root"
identity = "~/.ssh/id_prod"
Каждый туннель описывается несколькими полями. Обязательные:
name, local, remote, host. Остальное опционально, boring подтянет нужное из SSH config или использует значения по умолчанию.Основные команды:
boring list # показать все туннели
boring open dev # открыть туннель по имени
boring open -a # открыть все туннели сразу
boring close dev # закрыть туннель
boring edit # открыть файл конфигурации
Поддерживаются glob-паттерны. Можно открыть сразу несколько туннелей командой вида
boring open prod*.Keep-alive
По умолчанию
boring отправляет keep-alive каждые 120 секунд. Значение можно переопределить глобально или на уровне конкретного туннеля:keep_alive = 60 # в секундах
[[tunnels]]
name = "flaky-server"
keep_alive = 30
...
boring не требует демона, не тянет зависимостей и не лезет в системные настройки. Один бинарник, один TOML-файл и туннели просто работают в фоне.➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
