背景

最近 apifox 的安全事件,让我想用密码管理器管理 ssh 密钥了。

以前也考虑过一次,但由于 bitwarden 不支持,就作罢了。

现在发现 bitwarden 在 2025 年已经支持了 ssh 密钥。

使用

导入密钥

具体可参见 Bitwarden SSH Agent | Bitwarden

这里说说我遇到的情况:

  1. 似乎无法导入自己现有的密钥,只能生成

这个解决方案是:先新建,让它随机生成一个,然后再打开这个条目重新编辑,就能在私钥右边看到一个从剪贴板导入,复制你的密钥即可

  1. 某些 rsa 的私钥似乎不支持,无法导入

这是因为旧版 OpenSSH 和大多数 TLS 库(例如 OpenSSH)使用的标准 PEM 格式,经典的 id_rsa 文件通常采用这种格式 。它是一个 ASN.1 编码结构,采用 base64 编码,并放置在 PEM 头部之间。

我们可以先备份,然后使用下面的命令进行转换

1
2
cp ~/.ssh/id_rsa ~/.ssh/id_rsa.bak
ssh-keygen -p -f ~/.ssh/id_rsa

转换后放到 windows 主机,使用时(比如测试 ssh -p 443 -T [email protected])可能会报错

1
2
Load key "/c/Users/Administrator/.ssh/id_rsa": error in libcrypto
[email protected]: Permission denied (publickey).

这个错误大概率是换行格式不对,需要将 CRLF 转换成 LF

如果你是在 git bash 中生成,或者是直接从 linux 下载文件到本地,大概率没问题。

如果你是在 windows 上创建文件然后拷贝进去,大概率存在问题

拷贝进去默认是这样

image

我们需要执行 dos2unix.exe ~/.ssh/id_rsa 来进行转换

转换后会是这个样子

image

注意,这些行尾都必须存在,格式必须一致,不然就会报错 Load key ...: error in libcrypto

转换后,这个 id_rsa 就可以导入 bitwarden 了

启动 ssh agent

打开 bitwarden desktop 客户端

打开设置 -> 启用 ssh 代理

Windows 上的使用

此时你直接在 windows 终端中执行 ssh-add -l 应该能看到了。

但是对于 mobaxterm 这种使用 putty pageant 协议的,使用不了

此处使用 mobaxterm 举例

[Windows] + [R],打开 services.msc

从服务列表中停止 OpenSSH Authentication Agent ,然后将其禁用

然后去 ndbeals/winssh-pageant: Bridge to Windows OpenSSH agent from Pageant. This means the openssh agent has the keys and this proxies pageant requests to it. 下载 winssh-pageant

然后双击运行,打开任务管理器,你应该能看到这个程序正在运行

image

然后再在 mobaxterm 本地终端中执行 ssh-add -l 应该能看到了

MacOS 的使用

这部分来自官方文档 Bitwarden SSH Agent | Bitwarden

如果从 App Store 安装

1
export SSH_AUTH_SOCK=/Users/<user>/Library/Containers/com.bitwarden.desktop/Data/.bitwarden-ssh-agent.sock

如果从 dmg 文件安装

1
2
3
export SSH_AUTH_SOCK=/Users/<user>/.bitwarden-ssh-agent.sock
#或者
launchctl setenv "SSH_AUTH_SOCK" "/Users/<user>/.bitwarden-ssh-agent.sock"

Linux 的使用

这部分来自官方文档 Bitwarden SSH Agent | Bitwarden

如果使用常规方法(deb/rpm/AppImage)安装

1
export SSH_AUTH_SOCK=/home/<user>/.bitwarden-ssh-agent.sock

如果您通过 Snap 或 Flatpak 安装

1
2
3
4
5
6
# Snap
export SSH_AUTH_SOCK=/home/<user>/snap/bitwarden/current/.bitwarden-ssh-agent.sock

# Flatpak: 有时会出现无法正常运行的情况
# https://github.com/bitwarden/clients/issues/13166#issuecomment-2755659475
export SSH_AUTH_SOCK=/home/<user>/.var/app/com.bitwarden.desktop/data/.bitwarden-ssh-agent.sock

根据您的环境,将上面的内容添加到您的 ~/.zshrc 或 ~/.bashrc 文件中