始めに結論を。パスワード同様、ssh の秘密鍵も KeePassXC で管理することをお勧めします。(2回目)
以前から ssh の鍵の管理方法について悩んでいましたが、LOLIPOP! のレンタルサーバーを借りたのを機に調べてみた所、パスワードの管理と同様に ssh の秘密鍵の管理も KeePassXC で行った方が便利になる事が分かりました。
2回目となる今回の記事では、KeePassXC に鍵ペアを登録、KeePassXC から ssh-agent に渡す設定、Windows11 の ssh-agent サービスの起動、パスフレーズなしで公開鍵認証でログインできる事の確認までを、Windows11編として記載します。今後の予定としては、
- 導入編
- Windows11 編 <- 今回
- WSL2 編
- Pageant 対応ソフトウェア、及び Git for Windows 編
- Linux 編
と進めていく予定です。記事を公開した後には、上記リストをリンクに書き換えます。
- 番外編 WSL2 で wsl2-ssh-agent を試す
- 番外編2 Synology NAS に公開鍵認証で接続する際の注意点
- 番外編3 Windows11 へ github 版の OpenSSH を試す (ssh-agent 不具合対策)
番外編3で、Windows11 へ github 版の OpenSSH を導入した所、ssh-agent.exe の不具合は解消しました。
KeePassXC への鍵の登録、設定
前回の記事で、ssh 単体で公開鍵認証方式で接続する所まで確認できましたので、KeyPassXC への秘密鍵の登録と、Windows11 の ssh-agent への自動登録を設定します。
ssh 秘密鍵/公開鍵を KeePassXC のエントリへ登録
WSL2 で作成した秘密鍵と公開鍵を、先程作成した KeyPassXC のエントリへ追加します(公開鍵は秘密鍵を登録後に自動作成するので登録しなくてもかまいません)。
Windows11 のエクスプローラで WSL2 のファイルシステムを参照できますので、~/.ssh/以下の鍵を登録します。
KeePassXC の ssh のエントリを開き、詳細設定の添付ファイルに「追加」から該当フォルダを開き、秘密鍵 id_ed25519 を登録します。(下の図では、念の為公開鍵も登録しています。KeeAgent.settings は、この後の作業で自動で作成されます)
SSH エージェントを設定します。
上部のチェックボックスは、上二つはチェックを入れ、下二つはチェックを外します。
- データベースを開いたりロックを解除した際にエージェントにキーを追加する
- データベースを閉じたりロックした際にエージェントからキーを削除する
この二つを設定する事で、KeePassXC を起動して認証が済んだ段階で Windows11 の ssh-agent に秘密鍵が追加され、KeePassXC を終了すると秘密鍵が削除されます。
フィンガープリント (MD5 と SHA256) と公開鍵を Linux 上で表示させて比較しましたが、同一の文字列が入っていました。
これで OK を押す事で、エントリの作成は完了です。
KeePassXC から Windows11 の SSH エージェントへ接続するように設定
KeePassXC の設定画面で「SSH エージェント」を開き、
- SSH エージェント統合を有効にするのチェックを入れる
- OpenSSH を使用するのラジオボタンを選択する
として OK を押します。
これで、Windows11 の ssh-agent への接続が出来るようになりました。
なお、ラジオボタンのもう一つの選択肢である Pageant は、前回の記事で前掲のこちらのページで説明されています(が殆ど理解できていません)。Git for Windows と連携させたい場合に使うのでしょうか。今回は使用しないで設定します。(後で検証します)
Windows11 の ssh-agent の起動
前回の記事で前掲のこちらのページを参考に設定しました。
管理者で起動した PowerShell で設定する
管理者で起動した PowerShell で下記のコマンドを実行すると、自動起動 + すぐに起動します。
$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
サービス (管理コンソール) で設定する
サービスの中に 「OpenSSH Authentication Agent」がありますので右クリックからプロパティを開きます。
- スタートアップの種類を自動に変更
- サービスの状態から開始ボタンを押す
これで Windows11 で OpenSSH の ssh-agent サービスが起動するようになりました。
動作確認 (Windows11)
ここまでの設定で、Windows11 では、KeePassXC を起動している時には ssh-agent に秘密鍵が登録されて、パスフレーズなしでログインできる状態になっているので確認してみます。
ターミナルから cmd.exe を開いて ssh を実行します。(.ssh/config は WSL2 と同様に設定しています)
# KeePassXC を起動している状態。秘密鍵が登録されている
C:\Users\hiro>ssh-add -l
256 SHA256:XXXXXXXXYYYYYYYYYYYZZZZZZZZZZZ hiro20180901 (ED25519)
# パスフレーズやパスワードなしでログインできた
C:\Users\hiro>ssh lolipop
[lolipop_username@server ~]$ exit
# KeePassXC を終了した状態。秘密鍵が消去される
C:\Users\hiro>ssh-add -l
The agent has no identities.
という事で、Windows11 付属の ssh では、想定していた通り動作しました。
まとめ
Windows11 で ssh-agent サービスを起動させ、KeePassXC に登録した秘密鍵の情報を渡す事で、パスフレーズやパスワードなしで LOLIPOP! レンタルサーバーにログインする事が出来ました。
KeePassXC を起動すれば鍵が登録されて、終了すれば鍵が消去されますので、特に複数サイトを使用している状況では便利かと思います。
次回は、WSL2 の ssh から Windows11 の ssh-agent に接続する方法について確認する予定です。
今回のアイキャッチ画像
Stable Diffusion で作成した、湖と夕暮れの絵です。やっぱりキーワードは難しい。Stable Diffusion の作り方・使い方にも工夫が必要ですね。
コメント