做桌面 SSH 工具,密码管理是绕不过去的一课。
最省事的做法是每个连接各自带一份密码存在配置里。短期没问题,长期一定是灾难:换机器、重装、想分享一份连接配置给同事,每一次都要面对「密码散落在几十个连接里」的现实。更糟的是导出配置做备份的时候,凭据会跟着一起出去。
原则:交给系统,不要自造
我的原则很简单:桌面工具的敏感凭据应该交给操作系统级的安全存储。在 Mac 上就是钥匙串(Keychain)。它有系统级的加密、解锁策略和授权提示,任何自造的加密文件都很难在这些问题上做得更好。
所以 Docklark 的方向是把连接密码统一收敛成一个 SSH 密码库,实体存进 macOS 钥匙串,而不是各自为政的连接字段。
内存缓存:别让钥匙串弹窗追着用户跑
钥匙串每次被访问都可能弹授权。多窗口、多连接的客户端如果每次取密码都去读钥匙串,体验会碎成渣。
所以密码库在钥匙串之上加了一层共享内存缓存:多个窗口、多条连接共用同一份缓存,授权一次,会话内不再打扰。密码的增删改都经过这层缓存,再落到钥匙串。
迁移才是最难的部分
真正难的不是存储,是迁移:已有连接里各自保存的旧密码,要集中搬进新的统一密码库。
Docklark 把迁移做成一个显式的集中过程,并且支持断点续传:中途失败(比如钥匙串被锁、某个条目暂时读不出来)不会推倒重来,修好后从上次的位置继续。
最重要的一条规则是读回核验:把一个密码写进新库后,要把它读回来和旧条目比对,核验通过之后才清理旧的保存位置。多做一次读回核验,可以降低「迁移显示成功但密码丢了」的风险,但不能代替完整的迁移测试。
密钥是另一条线
密码之外还有密钥。Docklark 支持生成 Ed25519、RSA 和 ECDSA 密钥,导入导出 OpenSSH 格式,查看指纹、复制公钥。指纹校验放在显眼的位置,因为导入密钥时最容易出的错就是拿错文件。
同时,Docklark 自己的 JSON 连接配置导入导出永远不包含凭据。配置可以随手分享和备份,密码和密钥永远留在钥匙串和密钥库里。
边界
统一密码库还在验收中:跨安装版本的钥匙串迁移、锁定钥匙串时的交互、系统授权弹窗,以及用新密码库跑真实 SSH 登录,都还在清单上。验证完成之前,我不会说它稳了。进展照旧同步在 Docklark 项目页。