KeePassとKeeAgentでWSL2用にssh-agentを動かす

はじめに

wsl-ssh-agentでWindows Subsystem for LinuxからWindowsのssh-agentを使う設定手順 · hnakamur’s blog は快適だったのですが WSL2 では使えないことが分かりました。

wsl-ssh-agentWSL 2 compatibility に回避策が書いてあるのを見つけ Use an ssh-agent in WSL with your ssh setup from windows 10 も読んで設定してみたので手順をメモしておきます。

KeePass と KeeAgent プラグインをセットアップ

KeePass Password Safe はパスワードマネージャーですが、 KeeAgent – lechnology.com プラグインを入れると experimental ではありますが ssh-agent が動かせるんですね。

私は以前 KeePass から KeePassXC Password Manager に乗り換えていたのですが、今回 KeePass に戻しました(→ KeePassXC でもssh-agentクライアント機能は使えました。追記参照)。

セットアップの手順は以下の通りです。

  1. Downloads - KeePass から KeePass 2.x のインストーラーをダウンロードしてインストール。
  2. KeeAgent の Download から KeeAgent の zip ファイルをダウンロード。
  3. KeePass を起動し [Tools]/[Plugins] メニューを開き、 Plugins ダイアログ下部の [Open Folder] ボタンを押す。
  4. エクスプローラーで KeePass のプラグインのフォルダーが開いたら、 KeeAgent の zip ファイル内の KeeAgent.plgx ファイルをそこにコピー。
  5. KeePass を一旦終了し再度起動してKeeAgent プラグインのインストールが終わったら KeePass の [Tools]/[Options] メニューを選んで Options ダイアログを開き KeeAgent タブの [Enable agent for Windows OpenSSH (experimental)] チェックボックスにチェックして [OK] ボタンを押す。

npiperelay.exe のセットアップ

Releases · rupor-github/wsl-ssh-agent の最新リリース “WSL 2 workaround” の Assets の wsl-ssh-agent.7z をダウンロードします(2021-07-04追記: Releases · rupor-github/wsl-ssh-agent にさらに新しいバージョンが出ています)。

解凍のために 圧縮・解凍ソフト 7-Zip をダウンロード、インストールします。

インストール後、エクスプローラーで wsl-ssh-agent.7z を選んでポップアップメニューを開き [7-Zip]/[展開…] メニューを選んで解凍します。

wsl-ssh-agent というフォルダーが作られますので、お好みの場所に移動します。

ここでは C:\wsl-ssh-agent に移動したとして説明を続けます。

このフォルダーには今回使用する npiperelay.exe が含まれています。

WSL2 の Ubuntu で socat パッケージをインストール

以下のコマンドを実行してインストールします。

sudo apt update
sudo apt -y install socat

WSL2 の Ubuntu で ~/.bashrc を編集

WSL 2 compatibility に書いてある設定のうち npireplay.exe のパスを自分の環境に応じて書き換えて ~/.bashrc に追記します。

export SSH_AUTH_SOCK=$HOME/.ssh/agent.sock
ss -a | grep -q $SSH_AUTH_SOCK
if [ $? -ne 0 ]; then
    rm -f $SSH_AUTH_SOCK
    ( setsid socat UNIX-LISTEN:$SSH_AUTH_SOCK,fork EXEC:"/mnt/c/wsl-ssh-agent/npiperelay.exe -ei -s //./pipe/openssh-ssh-agent",nofork & ) >/dev/null 2>&1
fi

WSL2 で ssh-agent を使う

WSL2 の端末を開きなおすか exec $SHELL -l を実行すれば ssh-agent が使える状態になります。

あとは普段通り ssh-add -l で登録済みの鍵一覧表示、 ssh-add ~/.ssh/id_ed25519 などで鍵を ssh-agent に追加します。

KeePass + KeeAgent の通知設定

デフォルトでは ssh-agent の鍵を利用するたびに Windows の通知バナーが表示され、音が鳴ります。

Windows のタスクバーのアクションセンターのアイコン(あるいは Win+A キー)を押してアクションセンターを開き [通知の管理] を押します。

[送信元ごとの通知の受信設定] の一覧で KeePass をクリックしてお好みで調整します。

2020-08-23 追記: KeePassXC 標準の ssh-agent client 機能でもOK

その後 KeePassXC Password Manager の ssh-agent client 機能でも大丈夫なことに気づきました。

[ツール]/[設定]メニューを選んで左のリストで[SSHエージェント]を選び、以下の2つのチェックボックスをオンにします。

Windows 10 に OpenSSH クライアントをインストール · hnakamur’s blog の手順で Windows の OpenSSH をインストールして ssh-agent サービスを動かしておく前提です。

この状態で KeePassXC のパスワードエントリに SSH の秘密鍵ファイルを添付し、パスフレーズをパスワードとして登録しておきます。でソノエントリを選んでポップアップメニューの[鍵をSSHエージェントに追加]メニューを選択します。

すると KeePassXC のマスターパスワードを入力してデータベースを開いた状態にすると ssh-agent に鍵が登録されます。 KeePassXC のデータベースをロック状態にすると ssh-agent から鍵は削除された状態になります。これは便利!

2020-08-23 追記: Ubuntu の KeePassXC で ssh-agent client 機能を使う

WSL2 とは無関係ですが KeePassXC 関連ということでついでに追記です。

Ubuntu の KeePassXC の ssh-agent client 機能を使うと Agent connection failed をいうエラーが出て困っていたのですが、今日原因と回避策を SSH Agent integration does not work with snap build · Issue #1951 · keepassxreboot/keepassxc で知りました。

snap のサンドボックスで制限されていたのが原因でした。 classic モードでインストールする技も今は使えなくっているそうで、以下のように開発モードでインストールすれば ssh-agent client 機能が使えました。

sudo snap install --devmode keepassxc

インストール済みの場合は一旦アンインストールしてから上記のコマンドで再度インストールすればOKです。