GitHubのSSH認証をVaultwarden+Yubikeyの二段構えにする
Table of Contents
前回に引き続きVaultwarden+Yubikeyネタ
動機
前回の記事でWebのパスワードレス化を進める一方で、ずっと棚上げにしていたのがSSHの秘密鍵管理。
現状、新しいPCをセットアップしたり、一時的に別の端末から作業したりするたびに、律儀に ssh-keygen で鍵ペアを作っては、GitHubやQNAP NAS、Kubernetesの各ノードの authorized_keys に「公開鍵」をバラ撒くという不毛な作業を繰り返していた。
この作業をなくすために、VaultwardenのSSHエージェント機能にssh鍵を集約する。また、バックアップとして物理的な鍵としてYubiKeyをつかえるようにしておく。このようにしてどの端末からでも、Vaultwarden or YubiKeyを一本差せば「いつもの鍵」でログインできる状態を目指す。
Vaultwarden
Bitwardenデスクトップアプリのインストール(Linux)
sshはOS内のソケットファイル/tmp/ssh-xxxx/agent.sockを介してagentに秘密鍵をリクエストする。その都合上、ブラウザの拡張機能では秘密鍵にアクセスすることができないため、デスクトップアプリをインストールする必要がある。
https://bitwarden.com/ja-jp/download/からdebパッケージをダウンロード後、インストール
$ sudo apt install ./Bitwarden-2026.3.1-amd64.debsnap版アプリはサンドボックスという隔離された環境で動いている関係上、アプリの外にソケットファイルを作成・通信することができないため、今回はdebでインストールする。
Bitwardenデスクトップアプリでの設定
「ファイル」 > 「設定」から 「SSHエージェントを有効にする」をONにする。

ついでに「ブラウザ統合」を有効にすると、毎回マスターパスワードを打つ手間が省けて楽
環境変数設定
.zshrcに以下を記載
export SSH_AUTH_SOCK="$HOME/.bitwarden-ssh-agent.sock"上記はSSHエージェントのソケット通信先を、システム標準からBitwardenのプロセスへリダイレクトする設定。
テスト
VaultwardenからSSHキーを生成し、公開鍵はGitHubに事前に登録。元々登録していた公開鍵はすべて削除しておく。
$ ssh -T git@github.com
# Vaultwardenのデスクトップアプリでポップアップが出てくる
Hi 4nm1tsu! You've successfully authenticated, but GitHub does not provide shell access.ssh接続すると、Vaultwardenのデスクトップアプリでポップアップが出てくるので、認可をクリックすると、認証が完了する。

Yubikey
Vaultwardenだけだと、サービスが停止した場合に詰むので、Yubikeyも登録しておく。
鍵ペア生成
# homeディレクトリの.ssh配下にid_ed25519_sk/id_ed25519_sk.pubという鍵ペアを生成する。
$ ssh-keygen -t ed25519-sk -f ~/.ssh/id_ed25519_sk -C "yubikey_primary"公開鍵をGitHub側に登録しておく。
テスト
Yubikeyを挿入した状態で、ssh接続すると
$ ssh -T git@github.com
Confirm user presence for key ED25519-SK SHA256:90/Rn+nj8VYAlVIXef/dvnHoUg8ADBUClE8ay8lpEEk上記のようにYubikeyのタッチセンサーの入力待ちになるので、タッチすると認証される。
おわりに

Bitwarden(Vaultwarden)とYubikeyで各端末毎にバラバラな鍵ペアが散在することがなくなった。
公開鍵を各種サーバに保存すれば、それらへのsshログインも同一の方式で行うことが可能になるので、時間があるときに設定しようと思う。