boring:把一长串 ssh -L 收进一个 TOML 的隧道管理器
阅读时间: 大约 7 分钟
boring:把一长串 ssh -L 收进一个 TOML 的隧道管理器

每个长期和远程服务器打交道的开发者,电脑里都飘着几个一直挂着的 SSH 隧道:本地 6379 转发到 prod 的 Redis、3000 转发到 staging 的 Grafana、一个 SOCKS5 代理走 bastion。管理它们的传统办法很「野」:shell 历史里翻 ssh -L,或者 autossh 配 systemd,再加一堆 screen/tmux 窗口。boring 是 alebeck 用 Go 写的命令行隧道管理器,v0.16.1、约 1.7k star,上过 Hacker News,主张「一个 TOML 管全部隧道」。本文基于其官网做分析。
一、它解决什么痛点
手敲 ssh -L 6379:localhost:6379 prod-01 的问题不在命令本身,而在:
- 隧道散落在不同终端窗口,断了不知道;
- 公司网络切换/VPN 抖动后要手动重连;
- 想把多条隧道一起启停,得开多个窗口;
- 远程转发、Unix 套接字转发、动态 SOCKS5 的参数各不一样,记不住。
boring 的思路是:把隧道声明式地写进 ~/.boring.toml,然后用 boring start/stop/list 统一管理,并内建 keep-alive 与断线自动重连。
二、配置长什么样
官网示例的配置非常直白:
[[tunnels]]
name = "tensorboard"
local = "9000"
remote = "localhost:9000"
host = "ml-cluster" # host 直接走 ~/.ssh/config 解析
[[tunnels]]
name = "db-staging"
local = "5001"
remote = "localhost:5001"
host = "staging.example.com"
user = "staging"
identity = "~/.ssh/id_staging"关键细节是 host = "ml-cluster"——它直接复用你已有的 ~/.ssh/config,并兼容 ssh-agent。这意味着你不用在 boring 里再写一遍主机别名、跳板机、密钥路径,boring 只负责「在这个 SSH 连接上转发哪些端口」。
三、能力面
官网列的功能:
- 本地/远程端口转发 + 动态 SOCKS5 代理;
- 自动重连与 keep-alive:网络断了自己拨回去;
- Unix 域套接字转发(不止 TCP 端口);
- TOML 配置,
boring edit直接开编辑器; - bash/zsh/fish 标签补全;
- 分组(v0.13 新增):
--group prod批量启停。

上面这张 boring list 输出很能说明日常体验:隧道按 [prod]/[staging]/[proxy] 分组,每行显示已存活时长(01m56s、11h03m)、本地→远端映射、走哪台 bastion;甚至有一条 [SOCKS] <- /tmp/tmp-sock 的反向 SOCKS5——从 bastion 上的 unix socket 反代回本地。
四、必须自己权衡的边界
它是「管理器」不是「SSH 服务器」,底层还是 ssh。boring 本质是帮你组织和重连
ssh进程,不重新实现 SSH 协议——这既是优点(安全模型直接复用 OpenSSH),也意味着它的能力边界 = OpenSSH 端口转发能力边界,不会凭空多出什么。自动重连不等于高可用。keep-alive + 重连对付的是网络抖动,但如果是远程服务器重启、跳板机变更、ssh-agent 锁死,仍要人工介入。它不能替代 systemd 级别的生产守护策略——Koala 点评定位它是「长期挂多条隧道的开发者」的桌面工具,而不是服务器侧的隧道编排。
v0.x 阶段:版本号 0.16.1,配置格式与命令仍可能演进;迁移到新版本前看 changelog。
安全责任在你:把 Redis、数据库端口转发到本地后,本机其他进程也能连——boring 不做访问控制,别以为「只转发给自己」就等于安全。
五、适用与不适用场景
适合: 每天要挂 3 条以上 SSH 隧道的开发者/数据工程师;厌倦了 shell 历史翻 ssh 参数的人;需要分组批量启停、想要一个 list 看清所有隧道状态的人;已经有 ~/.ssh/config、不想再维护一套连接信息的人。
不适合: 只挂一条隧道、手敲命令就够的人;需要在服务器侧无人值守跑隧道、要 systemd 单元与告警的场景(boring 是桌面/交互式工具);需要 Web 管理界面或多用户共享隧道配置的团队。
六、客观分析:优势与意义
优势: 声明式 TOML + 复用 ~/.ssh/config,不重复维护连接信息;自动重连与 keep-alive 解决最痛的「断了不知道」;分组批量操作;Unix 套接字与 SOCKS5 都覆盖;单二进制、补全齐全。
局限: 不替代 ssh,能力上限即 OpenSSH 转发;定位是交互式桌面工具,不是生产守护方案;v0.x 仍在演进;无内置监控告警。
boring 这类工具的价值,在于把「本来就该是声明式的东西」从 shell 历史里捞出来。SSH 隧道本质是一组配置,不是一串命令——boring 只是把这件事做对了:少记一个参数,就少一次半夜排查「为什么 tensorboard 又连不上」。它不惊艳,但「just works」正是它上了 HN 的原因。