
Bitwarden Secrets Managerに保存されたSSH鍵を提供するSSHエージェント
Bitwarden Secret Manager にシークレットとして保存された SSH 鍵を提供する SSH エージェントです。
SSH 認証と Git コミット署名に対応しています。

Unix ドメインソケットサーバーとして SSH エージェントプロトコルを実装し、SSH クライアントと Bitwarden Secrets Manager の間の安全なブリッジとして機能します。
特徴は以下のとおりです:
/tmp/vc-$(whoami)-ssh-agent.sock の Unix ソケットで待ち受けます。ssh-agent-lib クレートを使用して要求を処理し、秘密鍵をディスクに公開することはありません。0600(所有者のみ)に固定され、鍵はプロセスメモリ内にのみ存在し、Bitwarden API への呼び出しには、シークレットへのアクセスを細かく設定できるスコープ付きマシントークンを使用します。内部では、非同期 I/O に Tokio を使用し、暗号操作には ssh-key クレートを使用しており、OpenSSH 形式の Ed25519 鍵と RSA 鍵の両方をサポートしています。
これは、私自身の必要性から生まれました。Bitwarden の GUI クライアントにある Bitwarden SSH Agent 機能は便利ですが、devbox の CLI だけを実行している場合には何を使えばよいのでしょうか? CI/CD パイプラインで git コミットに署名するために、SSH 鍵を安全に持ち込むにはどうすればよいのでしょうか? 秘密鍵をコピーせずに、一時的なコンテナや VM から SSH 接続を開く必要がある場合はどうすればよいのでしょうか? キーチェーンに保存され、ログインセッションに結び付けられたパスフレーズを扱わずに済ませるにはどうすればよいでしょうか?
そこで私は、SSH 鍵を取得して、その秘密鍵(private counterpart)を公開せずに利用できるようにする小さな CLI ツールを書きました。
また、Bitwarden のボールト全体を環境に持ち込まないように、Bitwarden Secrets Manager を使用しています。これにより、どのマシンがどのシークレットにアクセスできるかを選択し、トークンの権限を細かく設定できます。
-----BEGIN OPENSSH PRIVATE KEY----- と -----END OPENSSH PRIVATE KEY----- の文字列を含めて保存する必要があります。以下のいずれかの方法を使用します。
poof を使用する:
poof install pirafrank/vault-conductor
curl -fsSL https://raw.githubusercontent.com/pirafrank/vault-conductor/main/install.sh | sh
brew tap pirafrank/tap
brew install vault-conductor
または、最新の安定版 を手動でダウンロードして $PATH に配置します。
cargo install --locked --git https://github.com/pirafrank/poof --tag VERSION
以下を指定する必要があります:
BWS_ACCESS_TOKEN: 上記で設定したマシントークン。この環境変数は、Bitwarden 製 の bws CLI ツールと同じ名前です。BW_SECRET_IDS: 各秘密鍵が保存されているシークレットの UUID のカンマ区切りリスト。各シークレットの UUID は BWS Web アプリで確認できます(シークレット名の下に表示されます)。BW_SERVER_ENDPOINT(オプション): カスタム Bitwarden サーバーエンドポイント(プロトコルなしのホストのみ)。指定しない場合、デフォルトは bitwarden.com です。有効な例は、bitwarden.eu(クラウド)、myvault.example.com、192.168.1.100、vault.internal(セルフホスト)です。これらは、上記の環境変数(CI や DevOps 環境に適しています)または設定ファイルのどちらかで渡すことができます:
# download the example config file at the default path, then customize to your needs
mkdir ~/.config/vault-conductor
curl -sSL https://github.com/pirafrank/vault-conductor/raw/refs/heads/main/config.yaml.example > ~/.config/vault-conductor/config.yaml
chmod 0600 ~/.config/vault-conductor/config.yaml
# set SSH Agent env var to vault-conductor socket
export SSH_AUTH_SOCK="/tmp/vc-$(whoami)-ssh-agent.sock"
# Start in foreground
# (recommended for first time users to verify config is ok)
vault-conductor start --fg
# Start the agent in background
vault-conductor start
# Stop the background agent
vault-conductor stop
start コマンドは、カスタム設定パスを指定するための --config オプションもサポートしています。環境変数は常に設定ファイルよりも優先されます。
時には、奇妙な状況をデバッグする必要があり、できるだけ多くのログが必要になることがあります。フォアグラウンドで実行して詳細な標準出力ログを取得するには、次のコマンドを実行します:
vault-conductor start --fg -vv
ユーザー空間の Systemd サービスとしてインストールできます。詳細はこちらをご覧ください。
コードの仕組みと構成に関する図は、docs ディレクトリを確認してください。 RSA 鍵を使用する前、またはエージェントを転送する前に、セキュリティポリシー を参照してください。
vault、/voːlt/ - 貴重品を保管するための地下室
conductor、/kənˈdʌk·tər/ - 指揮者、熱や電気を伝導するもの
転じて、Bitwarden のボールトから開発環境へ、あなたの貴重な SSH 鍵を導通させるもの。
このプロジェクトは MIT ライセンスの下でライセンスされています。
詳細は LICENSE ファイルを参照してください。