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/ 金鑰檔案提供更好的安全性和便利性。