
字节笔记本
2026年8月27日
Berth:Swift 原生的 macOS SSH 工作区,终端、SFTP 和 AI 助手一个不落
本文介绍 xinghelee 开源的 Berth,一个用 Swift 原生编写的 macOS SSH 客户端。它把终端、SFTP、端口转发和 AI 助手收进一个工作区,Metal 渲染的终端、无限分屏和 Keychain 密钥管理是它的几个记忆点。
项目简介
Berth 今年 7 月才建仓,还处在早期阶段(stars 不多),但更新相当勤,最近一次提交就在本周。项目要求 macOS 15 以上(推荐 macOS 26),通用二进制,Release 构建 带 Developer ID 签名并通过 Apple 公证。协议是 GPL-3.0。
作者对它的定位是"保留终端的直接感,同时把连接、远程文件和上下文工具放进同一个工作区"。实际用下来,这个描述对应的是一条 Xcode 风格的检查器侧栏:AI、SFTP、服务器信息、Docker、代码片段都挂在旁边,随取随用。
核心特性
- Metal 渲染终端:基于 SwiftTerm 做终端仿真,渲染走 Metal,分屏嵌套无上限,支持搜索、主题、断线自动重连和连接复用。
- 完整的连接管理:密码、私钥、ssh-agent、keyboard-interactive 四种认证方式;能导入 ssh_config、配置跳板机和 HTTP/SOCKS5 代理。
- 工作区分组:主机按 Arc 浏览器那种工作区方式组织,圆点切换器加触控板滑动翻页;分组归属通过 iCloud 同步。
- 端口转发:本地、远程、动态 SOCKS5 三种转发模式,临时调试内网服务够用。
- SFTP 文件面板:走当前 SSH 连接直接浏览、上传、下载、预览、编辑远端文件,双向拖拽,文件夹可以递归下载。
- 服务器仪表盘:每台主机的 CPU、内存、磁盘、网络、负载实时可见,Docker 和 Podman 容器状态与日志也能直接看。
- AI 助手:读取当前终端上下文,建议或直接执行命令,输出按 Markdown 渲染(含表格);每个主机的会话独立持久化,下次接着聊。
键盘优先
Berth 在快捷键上花了心思:⌘K 快速连接、⌘T 新标签页、⌘D 分屏、⌘F 搜索、⌘I 服务器信息、⌘⇧A 呼出 AI 助手。Ctrl 组合键全部透传给远端 shell,readline、vim、Emacs 的操作习惯不会被本地劫持——这是很多 Electron 系 SSH 工具做不好的地方。
AI 提供商与密钥安全
AI 面板可以在活动会话里执行命令、读输出、继续排查。内置了 Anthropic、OpenAI、Gemini、DeepSeek、OpenRouter、Ollama、LM Studio 等预设,任何 OpenAI 或 Anthropic 兼容端点都能手动配置,所以本地模型也行。
安全设计是 Berth 宣传的重点:密码、私钥、passphrase 只存 macOS Keychain,不落明文数据库或 JSON 备份;API key 同样只进 Keychain;首次连接和 host key 变化会显式提示 known_hosts 校验;SSH 连接不依赖厂商云服务,无需注册账号。
安装指南
前置要求就一个:macOS 15+。
# Homebrew
brew install --cask xinghelee/tap/berth或者到 GitHub Releases 下载 dmg 拖进 Applications,构建已签名公证,不会被 Gatekeeper 拦。
想自己编译的话:macOS 15+、Xcode 16+(含 Metal 工具链)加 XcodeGen:
xcodegen generate
xcodebuild -project Berth.xcodeproj -scheme Berth -configuration Debug build项目不签入 .xcodeproj 文件,全靠 XcodeGen 生成;缺 Metal 工具链时先跑 xcodebuild -downloadComponent metalToolchain。
技术栈
- Swift + SwiftUI,终端视图桥接 AppKit
- SwiftTerm 终端仿真 + Metal 渲染
- Citadel 与内置 swift-nio-ssh 做 SSH(vendor 目录带 RSA 兼容性补丁)
- SwiftData 持久化,XcodeGen 管理工程
注意事项
- 仅支持 macOS,Windows/Linux 用户请绕行
- GPL-3.0 协议,二次开发注意传染性
- 项目早期,版本迭代快,升级前扫一眼 Release notes
- 使用云端 AI 提供商时,终端上下文内容会发给对应服务商,企业环境按自身安全策略选择提供商和上下文范围