RelayBar: 原生 macOS 菜单栏 SSH 端口转发管理器

RelayBar: 原生 macOS 菜单栏 SSH 端口转发管理器

RelayBar 是一个原生的 macOS 菜单栏应用程序,旨在简化本地 SSH 端口转发的管理。通过直接调用内置的 /usr/bin/ssh 二进制文件,RelayBar 提供了一个图形界面,用于启动、停止和组织 SSH 隧道,而无需外部依赖或 shell。

核心功能和隧道管理

RelayBar 允许用户管理本地 (-L) SSH 转发。它支持通过五字段表单进行手动输入以及导入常见的 SSH 命令,例如 ssh -N -L 8080:localhost:3000 user@host

关键管理功能包括:

  • 一键控制:用户可以单击一次启动和停止单个隧道。
  • 浏览器集成:隧道可以启动并同时在默认网页浏览器中打开其关联的本地 URL。
  • 一键隧道创建:隧道可以手动添加或从现有命令导入。
  • 本地存储:隧道定义存储在用户的本地 UserDefaults 中。
  • 进程清理:当 RelayBar 应用程序退出时,所有子 SSH 进程将被终止。

可靠性和连接处理

RelayBar 实现了自动重连逻辑以处理不稳定的连接。如果隧道意外断开,应用程序将使用指数退避策略最多重试 10 次。启动失败会直接显示在菜单栏界面的隧道条目旁边,以便立即可见。

安全性和系统集成

RelayBar 设计为以非沙盒应用程序运行,使其能够像命令行 SSH 客户端一样行为。这种集成确保它可以访问用户的 ~/.ssh/configknown_hosts 文件,使用配置的身份文件,并继承对用户 SSH 代理的访问权限。

为了保持安全,RelayBar 采用了以下几项限制:

  • 不调用 shell:应用程序永不会调用 shell 来执行命令。
  • 受限选项:在导入过程中,安全的连接选项如 -p-J-i 和特定的 -o 值会被保留,而可能执行本地命令、选择任意配置文件或写入日志的选项将被拒绝。
  • 每项仅一个转发:每个 RelayBar 项故意仅限于一个本地 (-L) 转发。

由于 SSH 以非交互方式运行,不支持密码提示。用户必须依赖 SSH 密钥或 SSH 代理进行身份验证。

构建和开发需求

RelayBar 需要 macOS 13 或更高版本以及 Xcode 命令行工具进行编译。构建过程使用一个 shell 脚本(./scripts/build-app.sh),它会自动在登录钥匙串中识别 Developer ID Application 证书,以使用强化运行时对应用进行签名。

为了分发,该项目提供了用于打包成 ZIP 文件和使用 notarytool 进行公证的脚本,以确保应用能够通过 macOS Gatekeeper 检查而不出现警告。

社区视角

虽然 RelayBar 提供了原生 GUI 来管理隧道,但一些用户指出,对于高稳定性需求,他们使用了替代工具。正如一位用户在 Hacker News 上提到的:

我倾向于使用 autossh,因为我在工作中经常需要这些,而且我的网络不稳定!

这凸显了 RelayBar 专注于原生 macOS 体验与使用像 autossh 这样的专门命令行实用程序进行持久连接管理之间的差异。

Sources