スポンサーリンク

KeePassXC で ssh 秘密鍵も管理して ssh-agent と連携する ~ Pageant 対応ソフトウェア、及び Git for Windows 編 ~

大きな滝
記事内に広告が含まれています。

始めに結論を。パスワード同様、ssh の秘密鍵も KeePassXC で管理することをお勧めします。(4回目)

以前から ssh の鍵の管理方法について悩んでいましたが、LOLIPOP! のレンタルサーバーを借りたのを機に調べてみた所、パスワードの管理と同様に ssh の秘密鍵の管理も KeePassXC で行った方が便利になる事が分かりました。

4回目となる今回の記事では、KeePassXC から Windows11 の ssh-agent に渡された鍵情報を

  • Pagent 対応ソフトウェア (WinSCP等)
  • Git for Windows (MSYS2)

の二つから参照し、パスフレーズを入力せずに ssh サーバーにログインできるかどうかを、Pageant & Git for Windows 編として記載します。今後の予定としては、

と進めていく予定です(Linux 編は後回しにしました)。記事を公開した後には、上記リストをリンクに書き換えます。次回の Linux 編で一区切りとしますが、他にも ssh-agent の鍵を共用したい環境を使う機会があれば追加で調べてみます。

番外編3で、Windows11 へ github 版の OpenSSH を導入した所、ssh-agent.exe の不具合は解消しました。

スポンサーリンク

Pageant 対応ソフトウェアから Windows11側 の ssh-agent を参照する方法

歴史的な経緯で、Windows の ssh/scp/sftp を使用するソフトウェアは、PuTTY 由来の Pageant という鍵を管理するソフトウェアを利用しています。

OpenSSH の ssh-agent と同様の機能を有していますが、Pageant <-> ソフトウェアの間の通信方式が ssh-agent とは異なり、更に鍵の記録方式が OpenSSH とは別ですので、OpenSSH と併用しようとすると鍵の管理がもっと複雑になってしまいます。

Pageant に対応する Windows11 のソフトウェアは、主な物は

  • PuTTY
  • Tera Term
  • FileZilla
  • WinSCP

等です。レンタルサーバへの接続に使用する Windows 用のソフトウェアは、殆どが Pageant に対応しています。

前回の WLS2 の記事で試したのと同様の考え方で、Windows11 の ssh-agent の情報をそのまま Pageant に渡す事ができれば、鍵の管理を KeePassXC に一元化できます。とはいえ、

混沌を極めるWindowsのssh-agent事情 - Qiita
どうしてこうなった。何の話?WindowsでのSSH-AGENTとSSHの話です。この記事での用語: SSHとssh, SSH-AGENTとssh-agentこの記事では、SSH-AGENT…

此方の記事に書かれている通り、特に Windows の ssh 回りについては混沌としています。Windows11 と WSL2 は、npiperelay.exe と socat を使用する事で、Windows11 側の ssh-agent を参照するように一本化できましたが、Pageant も含めるとリンク先の下の方にある図の通り、複雑な経路を辿るしかないように感じます。

そんな中、何気なく winget で pageant.exe が単独で導入できないか調べていた所、WinSSH-Pageant というソフトウェアを見つけました。この名称で更にググってみると、以下のページを見つけました。

OpenSSH for Windowsのssh-agentをPutty Pageant利用アプリから使用する - Qiita
はじめにVisual Studio Code(VSCode)の環境とPutty Pageant利用アプリとの共存を行うための設定についてのメモです。Visual Studio Code(VSCo…

WinSSH-Pageant を使用すれば、Windows11 OpenSSH の ssh-agent のプロキシとして動作して、Pageant を必要とするソフトウェアに鍵を提供できそうです。

WinSSH-Pageant について

GitHub - ndbeals/winssh-pageant: Bridge to Windows OpenSSH agent from Pageant. This means the openssh agent has the keys and this proxies pageant requests to it.
Bridge to Windows OpenSSH agent from Pageant. This means the openssh agent has the keys and this proxies pageant request...

Windows 標準の OpenSSH の ssh-agent の情報を Pageant のプロトコルで渡すソフトウェアです。

Proxy Pageant requests to the Windows OpenSSH agent (from Microsoft), enabling applications that only support Pageant to use openssh.

Pageant 要求を Windows OpenSSH エージェント (Microsoft から) にプロキシし、Pageant のみをサポートするアプリケーションが openssh を使用できるようにします。

https://github.com/ndbeals/winssh-pageant

秘密鍵の登録は Windows 標準の OpenSSH の ssh-agent に行い、Pageant の要求があった際にはプロキシして渡します。

まずは WinSSH-Pageant が想定通りに機能するかどうか試してみました。

WinSSH-Pageant のインストール

管理者として実行しているターミナルから winget を使用してインストールするのが簡単かと思います。

>winget search winssh-pageant
名前           ID                         バージョン ソース
------------------------------------------------------------
WinSSH-Pageant NathanBeals.WinSSH-Pageant 2.3.1      winget

>winget install winssh-pageant

msi でインストールされるので、実行ファイルが何処に配置されたのか分かりにくいですが、Windows11 の User のホームディレクトリ以下の下記の場所に配置されます。

C:\Users\hiro\AppData\Local\Programs\WinSSH-Pageant

更に msi でインストールした場合には、スタートアップに自動で登録されます。PC を再起動した際にも起動して常駐してくれます。

実際にWinSSH-Pageant が起動しているかどうかを確認してみます。

C:\Users\hiro\AppData\Local\Programs\WinSSH-Pageant>winssh-pageant.exe
2023/02/11 12:36:57 This application is already running, exiting.

既に起動している場合には、二重に起動しないようにメッセージが表示されます。

winget を使用しないインストール方法、及びスタートアップへの登録方法は、上記の github に記載がありますので参照ください。

WinSCP で接続確認

スポンサーリンク

WinSSH-Pageant が起動できましたので、試しに Pageant を使用するソフトウェアで確認します。手元で使用している WinSCP で試してみました。

LOLIPOP! SSH サーバの設定を登録していましたので、これを使用します。Pagent が起動している場合には優先して使用するようですので、パスワード欄を空白のままで「ログイン」を押してみます。

ログインを押すと表示されるメッセージ
鍵を二つ登録しているので、一つ目で失敗、二つ目で成功している

上記のような認証画面が一瞬表示された後、パスワードやパスフレーズが聞かれる事なくログインできました。

WinSCP のログの記録を有効にして確認すると

. 2023-02-11 13:00:59.792 Trying Pageant key #1
! 2023-02-11 13:00:59.798 Authenticating with public key "hiro20180901" from agent
. 2023-02-11 13:00:59.820 Sending Pageant's response
. 2023-02-11 13:00:59.839 Access granted
. 2023-02-11 13:00:59.840 Opening main session channel
. 2023-02-11 13:00:59.914 Opened main channel
. 2023-02-11 13:00:59.922 Started a shell/command

となっていましたので、Pageant から鍵情報を入手し、公開鍵認証を使用してログインしている事が分かります。

ここまでで、Windows11 の OpenSSH の ssh-agent の鍵情報が、WinSSH-Pageant を通してPageant を使用するソフトウェアに渡されて、公開鍵認証が使用できている事が分かりました。

スポンサーリンク

Git for Windows から Windows11側 の ssh-agent を参照する方法

Git for Windows は MSYS2 で動作していますので、WSL2 や Hyper-V 等の仮想環境とは異なり、Windows 上でネイティブで動作する U*IX ライクな環境で動作しています。Git for Windows の MSYS2 環境にも ssh-agent は存在していますが、Windows 側の OpenSSH とは独立して動作します。

そこで、Git for Windows に同梱されている ssh-pageant を使用します。Windows11 で動作している WinSSH-Pageant から鍵情報をプロキシして、Git for Windows 内の ssh から参照できるようになります。

GitHub - cuviper/ssh-pageant: An SSH authentication agent for Cygwin/MSYS to PuTTY's Pageant.
An SSH authentication agent for Cygwin/MSYS to PuTTY's Pageant. - cuviper/ssh-pageant

ssh-pageant is a tiny tool for Windows that allows you to use SSH keys from PuTTY's Pageant in Cygwin and MSYS shell environments.

You can use ssh-pageant to automate SSH connections from those shells, which is useful for services built on top of SSH, like SFTP file transfers or pushing to secure git repositories.

ssh-pageant works like ssh-agent, except that it leaves the key storage to PuTTY's Pageant. It sets up an authentication socket and prints the environment variables, which allows OpenSSH connections to use it.

ssh-pageant は、Cygwin および MSYS シェル環境で PuTTY の Pageant から SSH キーを使用できるようにする Windows 用の小さなツールです。

ssh-pageant を使用して、これらのシェルからの SSH 接続を自動化できます。これは、SFTP ファイル転送や安全な git リポジトリへのプッシュなど、SSH の上に構築されたサービスに役立ちます。

ssh-pageant は ssh-agent と同じように機能しますが、キー ストレージを PuTTY の Pageant に任せている点が異なります。認証ソケットをセットアップし、環境変数を出力します。これにより、OpenSSH 接続がそれを使用できるようになります。

使い方は、リンク先に記載されているように、~/.bash_profile に以下の行を追加して、Git for Windows の bash を再起動します。

# ssh-pageant
 eval $(/usr/bin/ssh-pageant -r -a "/tmp/.ssh-pageant-$USERNAME")

環境変数の SSH_AUTH_SOCK を適切に設定してくれますので、Git for Windows の ssh が Windows11 側の ssh-agent の鍵情報を使用できるようになります。

Git for Windows の ssh で接続確認

$ ssh-add -l
256 SHA256:XXXXXXXXXXXXXXXXYYYYYYYYYYYZZZZZZZZZZZZZZZZ git (ED25519)
256 SHA256:XXXXXXXXXXXXYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZ hiro20180901 (ED25519)

# パスフレーズなしで LOLIPOP! にログイン
$ ssh lolipop
[lolipop-username@server ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.

# github への接続テスト
$ ssh -T github
Hi username! You've successfully authenticated, but GitHub does not provide shell access.

ssh-add -l で鍵情報が取得できている事が確認でき、LOLIPOP! レンタルサーバーや github への接続も可能になっています。

まとめ

今回は、KeePassXC から Windows11 上の ssh-agent に渡された鍵情報を、Windows の Pageant 対応ソフトウェアで利用する方法と、Git for Windows のような MSYS2 環境で利用する方法を確認しました。

Pageant 環境向けには、WinSSH-Pageant を導入する事により、PuTTY の pageant.exe が管理していたように、鍵情報を各ソフトウェアに提供し、パスフレーズなしで公開鍵認証を利用する事が出来ました。

また、Git for Windows のような MSYS2 環境向けには、同梱されている ssh-pageant を利用する事によって、WinSSH-Pageant 経由で鍵情報を取得できました。

これまで試した環境全てで、KeePassXC が起動していれば鍵情報を使用でき、KeePassXC を終了すれば鍵情報は消去されます。複数の鍵情報も一括で Windows11 の ssh-agent に渡す事が出来ます。

次回は、Hyper-V 仮想環境で動作している Linux で KeePassXC を使って鍵情報を管理できるかを確認したいと思います。

今回のアイキャッチ画像

Stable Diffsion で作成した滝の絵です。私の出身地には大きな滝がありました。年に数度ですが遊びに行くのが楽しみでした。

コメント

タイトルとURLをコピーしました