Bitwarden 已在其桌面应用程序中集成了 SSH agent,使用户能够直接在加密保险库中存储和管理 Secure Shell (SSH) 密钥。这一转变允许开发人员和系统管理员摆脱在本地文件中存储私钥的做法,转而通过集中式的密码管理器来管理用于服务器、Git 提交和其他基于 SSH 的服务的身份验证。

这张图片展示了在 Bitwarden 桌面应用程序中启用 SSH 存储的初始步骤。
保险库状态与授权逻辑
Bitwarden SSH agent 的行为直接受用户保险库状态的控制。当保险库处于登出或锁定状态(在初始解锁之前)时,agent 将不会列出或签署请求。
一旦保险库解锁,agent 就会变为激活状态。用户可以选择应用程序是自动批准请求还是需要手动授权。如果启用了授权,Bitwarden 会提示用户批准每一个特定的 SSH 密钥使用请求,确保后台进程或远程服务器在没有明确同意的情况下无法使用密钥。
“SSH agent 转发允许您访问的远程服务器使用您的密钥验证到其他服务器,而无需将您的私钥暴露到保险库之外。”
— Bitwarden SSH Agent | Bitwarden
系统配置与集成
若要将 Bitwarden 作为主要的 SSH agent,用户必须配置其操作系统将 SSH 请求路由到 Bitwarden 套接字。在 Windows 上,这涉及禁用原生的 OpenSSH Authentication Agent 服务。

此视觉效果展示了用户必须禁用原生 agent 的 Windows 服务面板。
由 HN Digest 根据 bitwarden.com 报告的数据绘制;数值按来源显示。
在 macOS 和 Linux 上,用户必须将 SSH_AUTH_SOCK 环境变量设置为指向 Bitwarden 桌面应用程序创建的特定套接字。例如,macOS 用户可能会在 .zshrc 或 .bashrc 文件中添加一条命令,以确保该变量在终端会话之间持久存在。
配置完成后,标准工具如 ssh-add -L 或 git 可以与 Bitwarden 通信进行身份验证,从而在不同的开发环境中实现无缝的工作流。
SSH Agent 转发与安全权衡
该集成支持 SSH agent 转发,允许远程服务器使用用户的本地密钥验证到第二个服务器。由于密钥保留在 Bitwarden 保险库内,私钥实际上从未暴露给中间服务器;服务器只需请求本地 Bitwarden 实例执行身份验证。
虽然这通过消除在机器之间手动移动密钥的需求提高了便利性,但它在易用性和安全性之间引入了权衡。用户可以通过使用“请求授权”功能来减轻 agent 转发的风险,该功能确保远程服务器使用本地密钥的任何请求都必须由用户手动批准。

此截图显示了用于减轻与 agent 转发相关风险的“请求授权”功能。
Hacker News 读者的反应
- 质疑: 几位评论者对报告的严重程度表示怀疑,指出相关的 pull request 已关闭且未被合并,并且该功能被描述为可选加入。 评论 ↗
- 替代方案: 一位评论者建议在 macOS 上使用安全隔离区(secure enclave)来管理 SSH 密钥,这将要求在每个新会话中进行指纹验证,以确保用户知晓每一次连接。 评论 ↗
- 替代方案: 其他人建议使用硬件安全密钥(如 Yubikey),并配置为要求物理触摸以确认每一次身份验证操作。 评论 ↗
- 质疑: 一位评论者认为这是一个 SSH agent 工作方式中的根本设计缺陷,指出这些工具旨在促进诸如跳板机之类的安全基础设施。 评论 ↗
以上为 Hacker News 讨论中观点的摘要,并非经过核实的事实。 阅读完整讨论 ↗