KeePassXC の SSH エージェント機能と Windows の ssh-agent.exe を連携させる

KeePass 形式のパスワード DB を読むアプリケーションの一つに KeePassXC があります。

このアプリには、 Pageant や ssh-agent といった既存の SSH Agent に鍵を追加したり削除したりする機能があります。

この記事では、 Windows 標準搭載の ssh-agent と KeePassXC を連携させる方法について説明します。

ssh-agent を起動する

最近の Windows (1803 "Spring Update" 以降) には、オプション機能の一つとして OpenSSH が搭載されています。

この OpenSSH には ssh-agent も含まれており、「OpenSSH Authentication Agent」サービスとして起動することができます。

自動起動の設定は、「サービス」からポチポチ設定することもできますし、以下のようなスクリプトを管理者権限の PowerShell で実行することで設定することもできます。

# OpenSSH Client をインストールする
# 詳しくは https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_install_firstuse を読んでください
$cap = Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Client*'
Add-WindowsCapability -Online -Name $cap.Name

# ssh-agent サービスの設定を行う
# 詳しくは https://docs.microsoft.com/en-us/windows-server/administration/openssh/openssh_keymanagement を読んでください
## ssh-agent のスタートアップの種類を「自動起動」に設定する
## 自動起動するかどうかは好みですが、自動起動しない場合、 Windows を起動する毎にサービスを開始する必要があります
Set-Service -Name ssh-agent -StartupType Automatic
## ssh-agent を起動する
Start-Service -Name ssh-agent

KeePassXC を設定する

「アプリケーション設定」の「SSH エージェント」を以下のように設定します。

以下のスクリーンショットが参考になるかもしれません。

「アプリケーション設定」の「SSH エージェント」で、「SSH エージェント統合を有効にする」と「Pageant の代わりに OpenSSH for Windows を使用する」にチェックボックスを入れる

秘密鍵のエントリーを追加する

KeePass データベースに秘密鍵のエントリーを追加します。

「エントリー」タブ

「パスワード」の欄に、秘密鍵のパスフレーズを入れます。それ以外は何でも構いません。

「パスワード」の欄にパスフレーズを入れる

「詳細設定」タブ

「添付ファイル」として秘密鍵を追加します。今回はファイル名として id_ed25519 を使っていますが、どのようなファイル名でも構いません。

エントリーに秘密鍵を添付する

公開鍵は、参照する際に KeePassXC が生成してくれるため、添付する必要はありません。

「SSH エージェント」タブ

「秘密鍵」セクションで、「添付ファイル」を選択し、ドロップダウンから先ほど添付したファイルを選択します。

添付した秘密鍵を見る設定を入れる

それ以外の設定はお好みで決めても構いませんが、以下の設定を有効にしないでください。

Windows の OpenSSH の制約で、これらを設定すると鍵をエージェントに登録できなくなります。

詳しくは Agent protocol error when adding ssh key on windows · Issue #4374 · keepassxreboot/keepassxc · GitHub を見てください。

終わりに

秘密鍵をパスワードマネージャーに覚えさせると、鍵がいろいろな所に散らばったりしなくなるので、そこそこ便利です。

そもそも秘密鍵を複数の端末で使いまわしてもいいのかなど、いろいろ議論があるかと思いますが、気が向いた方は使ってみるといいかもしれません。