因为我的电脑和服务器都很多,管理多台设备的 SSH 配置一直是个痛点。
以前的做法是手动复制私钥,然后还得维护一份差异巨大的 ~/.ssh/config,不安全又麻烦。
最近我重构了整套方案,达成了以下效果:
- 零私钥落地:私钥只存在于 Bitwarden 内存,硬盘上无私钥文件。
- 配置云同步:公钥和 Config 通过 OneDrive 同步。
- 路径大一统:利用 Symlink 抹平 Windows 和 macOS 的路径差异。
需要提前启用 Bitwarden 的 SSH Agent 功能,参考官方文档:Bitwarden SSH Agent
目录结构策略
私钥交给 Bitwarden 托管,我们只需要同步公钥和通用配置。
在 OneDrive 中建立如下结构:
OneDrive/ |
抹平路径差异
这是最关键的一步。
SSH 配置文件不支持环境变量(如 %OneDrive%),且不同电脑的云同步路径各异(D 盘、C 盘、/Users/...)。
解决方案是在每台电脑的 ~/.ssh/ 下创建一个名为 cloud_ssh 的软链接,指向真实的云同步目录。
Windows
cd ~/.ssh |
macOS / Linux
cd ~/.ssh |
现在,无论在哪个系统,~/.ssh/cloud_ssh 都是通用的路径。
SSH Config 配置
在本地的 ~/.ssh/config 中,只需要一行 Include:
Include ~/.ssh/cloud_ssh/common_config |
然后在 OneDrive 里的 common_config 编写配置:
# example |
这里 IdentityFile 指向的是 .pub 文件。在 SSH Agent 模式下,SSH 客户端会读取这个公钥的指纹,然后去 Bitwarden Agent 里请求对应的私钥。
疑难杂症
Windows Git 的坑
在 Windows 上配置好后,ssh -T [email protected] 通了,但 git clone 可能会报 error in libcrypto 或 Permission denied。
这是因为 Git for Windows 默认使用内置的 MinGW SSH,它找不到 Bitwarden 的 Agent,也不支持指向 .pub 的配置。
强制 Git 使用 Windows 原生 OpenSSH 即可。
git config --global core.sshCommand "C:/Windows/System32/OpenSSH/ssh.exe" |