Featured image of post 使用 Vaultwarden 和 Bitwarden SSH 代理管理 SSH 密钥Featured image of post 使用 Vaultwarden 和 Bitwarden SSH 代理管理 SSH 密钥

使用 Vaultwarden 和 Bitwarden SSH 代理管理 SSH 密钥

了解如何使用 SSH 代理功能在 Vaultwarden/Bitwarden 中存储和管理 SSH 密钥。安全密钥访问、跨设备同步和 CLI 设置指南。

为什么将 SSH 密钥存储在密码管理器中

SSH 密钥是对远程服务器、Git 提供商和内部基础设施进行身份验证的黄金标准。然而,大多数开发人员将它们作为普通文件存储在 ~/.ssh/ 下 - 不受保护、未同步且未经审核。将 SSH 密钥移至 Vaultwarden(或 Bitwarden)解决了三个基本问题:

  • 集中管理:所有密钥都位于一个保管库中,而不是分散在各个计算机上。
  • 跨设备同步:添加一次密钥;它会自动出现在每个设备上。
  • 审计跟踪:服务器会记录每个按键访问和客户端操作。

Bitwarden SSH 代理弥合了锁定的保管库和透明地使用 SSH 密钥的日常需求之间的差距。

Bitwarden SSH 代理概述

Bitwarden SSH 代理是一个轻量级守护程序,它通过标准 SSH_AUTH_SOCK 接口公开存储在保管库中的 SSH 密钥。当 sshgit 需要密钥时,它会与代理通信,代理请求 Bitwarden CLI (bw) 从保管库中获取相应的私钥。密钥材料永远不会接触磁盘 - 它位于加密的保管库中,仅在需要时在内存中解密。

此方法适用于任何 OpenSSH 兼容客户端:sshscprsyncgitmosh 以及使用 SSH 代理协议的 GUI 工具。

先决条件

要求笔记
Vaultwarden 服务器(自托管)或 Bitwarden 云CLI 登录需要 API 端点
Bitwarden CLI (bw)官方命令行客户端
OpenSSH 客户端随 Linux、macOS 和 Windows 10+ 一起提供
SSH_AUTH_SOCK 支持各大平台均可用

安装 Bitwarden CLI

Linux / macOS

# Download the CLI
curl -Lo bw.zip "https://vault.bitwarden.com/download/?app=cli&platform=linux"
unzip bw.zip
sudo install bw /usr/local/bin/
rm bw.zip bw

Windows(PowerShell)

# Using winget
winget install Bitwarden.CLI

# Or download manually
Invoke-WebRequest -Uri "https://vault.bitwarden.com/download/?app=cli&platform=windows" -OutFile bw.zip
Expand-Archive -Path bw.zip -DestinationPath C:\tools\bw
$env:Path += ";C:\tools\bw"

验证安装:

bw --version

配置 SSH 代理

Bitwarden CLI 包含一个以 bw serve 开头的内置 SSH 代理服务器:

# Start the agent (runs in foreground — use a terminal multiplexer or daemonize it)
bw serve --port 8080

对于持久后台会话,请创建专用用户服务或使用 screen / tmux。在带有 systemd 的 Linux 上:

[Unit]
Description=Bitwarden SSH Agent
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/bw serve --port 8080
Restart=on-failure
User=youruser

[Install]
WantedBy=default.target

环境设置 — 将 SSH_AUTH_SOCK 指向代理的 Unix 套接字:

export SSH_AUTH_SOCK="$HOME/.bitwarden-ssh-agent.sock"

将此行添加到您的 ~/.bashrc~/.zshrc 或 shell 配置文件中,以便它在会话中保持不变。

将 SSH 密钥添加到 Vault

Vaultwarden 支持专用的 SSH 密钥 项目类型,该类型将私钥及其对应的公共密钥存储为单个保管库条目。

  1. 打开您的保管库(Web UI 或客户端)。
  2. 单击 添加项目SSH 密钥
  3. 填写字段:
    • 名称:例如“GitHub 部署密钥”
    • 私钥:粘贴完整的 PEM 或 OpenSSH 私钥(包括 -----BEGIN OPENSSH PRIVATE KEY-----)。
    • 公钥:粘贴对应的.pub文件内容。
    • 如果密钥受密码保护,请在自定义字段中附加密码
  4. 保存该项目。

该密钥现已在 Vaultwarden 保管库中进行静态加密,可供登录同一帐户或组织的每台设备使用。

使用密钥进行 Git 操作

一旦代理运行并且您的保管库解锁,git 就会透明地使用存储在 Vaultwarden 中的 SSH 密钥:

# Clone a repository using SSH
git clone [email protected]:username/private-repo.git

在幕后,git 调用 ssh,它与 SSH 代理套接字通信,后者中继到 bw serve,后者从保管库获取密钥。没有提示,没有文件复制,没有手动ssh-add

相同的流程适用于 git fetchgit pushgit pull 以及通过 SSH 的任何其他远程操作。

通过 SSH 访问服务器

以同样的方式连接到任何远程服务器:

代理自动协商正确的密钥。如果保管库中有多个密钥,SSH 会尝试每个密钥,直到服务器接受一个 — 如果需要,可通过 ~/.ssh/configIdentitiesOnly 进行配置。

管理多个密钥

使用 ~/.ssh/config 将特定键固定到特定主机:

Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_ed25519_vault

Host personal-server
  HostName 192.168.1.100
  IdentityFile ~/.ssh/id_rsa_internal

这些 IdentityFile 路径是象征性的 - 代理根据存储在保管库中的密钥解析它们。

安全考虑

  • 主密码 + 2FA:每次密钥访问都需要一个未锁定的保管库。如果保管库被锁定,bw serve 无法解密密钥。
  • 密钥永远不会接触磁盘:私钥材料在内存中解密并通过代理套接字提供 - 它永远不会写入文件。
  • 会话超时:配置 bw 会话超时,以便保管库在不活动后自动锁定。
  • 审核日志:Vaultwarden 记录每次登录、项目访问和同步事件。您可以查看谁访问了哪个密钥以及何时访问。

撤销访问权限

当团队成员离开或设备丢失时,通过从包含 SSH 密钥的 Vaultwarden 组织或集合中删除用户来撤销访问权限。由于密钥永远不会存储在本地(仅由代理临时缓存),因此撤销是即时的 - 该密钥根本无法再被该用户解密。

  1. 打开 Vaultwarden 管理面板。
  2. 导航到 管理用户
  3. 从组织中删除用户(或调整收集权限)。
  4. 用户的 bw serve 将无法在下一次操作中获取密钥。

概括

Bitwarden SSH 代理将 Vaultwarden 从密码管理器转变为基于 SSH 工作流程的完整凭证中心。密钥在保管库中保持加密状态,跨设备同步,并通过标准 SSH 代理界面按需提供服务。与主密码和 2FA 相结合,此设置比传统的 ~/.ssh/ 密钥文件提供更好的安全性和便利性。