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/config 和 known_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 这样的专门命令行实用程序进行持久连接管理之间的差异。