Windows11 ssh-agent の不具合
WSL2 の ssh から Windows11 の ssh-agent を使用する方法を以下の記事に記載しました。
この記事では npiperelay.exe と socat を使用していましたが、Ubuntu 22.04 LTS では鍵の一覧は受け取る事ができるものの、鍵の情報を使用して公開鍵認証で接続できない状態でした。
最初は Ubuntu 22.04 で試していたのですが、ssh-add -l では登録されている鍵が表示されるのですが、LOLIPOP! レンタルサーバに接続しようとするとパスフレーズを聞かれる状態でした。
どうやら Ubuntu 22.04 の ssh 固有の問題らしいです。Ubuntu 20.04 では問題なく動作しました。
https://hiro20180901.com/2023/02/12/keepassxc-wsl2-ssh-to-windows11-ssh-agent/
その原因について言及されていたのが以下の Zenn の記事です。
![](https://res.cloudinary.com/zenn/image/upload/s--NwVgeCnT--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:WSL2%25E3%2581%25AEOpenSSH%2520Agent%2520Relay%25E3%2581%258C%25E5%258B%2595%25E3%2581%258B%25E3%2581%25AA%25E3%2581%258F%25E3%2581%25AA%25E3%2581%25A3%25E3%2581%259F%25E3%2581%25AE%25E3%2581%25A7%25E8%25AA%25BF%25E6%259F%25BB%25E3%2581%2597%25E3%2581%259F%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Masaki%2520Hara%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2l3aEI4dTM5cFZyM09sWVFLcUU5Z1ozV2d3MHlsMS03cUZad0huYWc9czI1MC1j%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
Windows11 の ssh-agent の不具合ですので、現状ではどうしようもない状態でした。
wsl2-ssh-agent について
この記事を作成して間もなく、Windows11 の ssh-agent の不具合を回避して、WSL2 ssh から利用するソフトウェアが公開されているのを知りました。
![](https://res.cloudinary.com/zenn/image/upload/s--oo6M5udG--/c_fit%2Cg_north_west%2Cl_text:notosansjp-medium.otf_55:wsl2-ssh-agent%253A%2520WSL2%25E3%2581%258B%25E3%2582%2589ssh-agent.exe%25E3%2582%25B5%25E3%2583%25BC%25E3%2583%2593%25E3%2582%25B9%25E3%2581%25B8%25E3%2581%25AE%25E3%2583%2596%25E3%2583%25AA%25E3%2583%2583%25E3%2582%25B8%2Cw_1010%2Cx_90%2Cy_100/g_south_west%2Cl_text:notosansjp-medium.otf_37:Yusuke%2520Endoh%2Cx_203%2Cy_121/g_south_west%2Ch_90%2Cl_fetch:aHR0cHM6Ly9saDMuZ29vZ2xldXNlcmNvbnRlbnQuY29tL2EtL0FPaDE0R2hpTkF4V3RMdEZSTEpTcnktUHEzNWZzOTRUWE1USmg5MzZ4b1RlPXMyNTAtYw==%2Cr_max%2Cw_90%2Cx_87%2Cy_95/v1627283836/default/og-base-w1200-v2.png)
しかしこの手法は、最近のLinuxで動きません。OpenSSHがバージョン8.9からssh-agentプロトコルを少し拡張したためです。ssh-agent.exeは少し古い(手元では8.6ベースだった)ので、拡張メッセージを受け取った瞬間に通信を切断してしまいます。
https://zenn.dev/mametter/articles/49a2b505ec0275
この回避策として、wsl2-ssh-agent を公開されています。
しかしwsl2-ssh-agentは単純なリレーではなく、ssh-agentプロトコルを少しだけ理解します。sshが拡張メッセージを送ってきたら、ssh-agent.exeに転送せず、ダミーのSUCCESSを返答してしまいます。これにより、OpenSSHの非互換問題を回避できます。
https://zenn.dev/mametter/articles/49a2b505ec0275
こちらを使用してみました。
wsl2-ssh-agent を試してみた
使い方は上記のリンク先に記載されていますので省略します。Ubuntu 22.04 LTS で試してみました。
# KeePassXC が停止状態
$ ssh-add -l
The agent has no identities.
# KeePassXC を起動すると鍵情報が見えるようになる
$ ssh-add -l
256 SHA256:XXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZ user@server (ED25519)
256 SHA256:XXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZ hiro20180901 (ED25519)
256 SHA256:XXXXXXXXXXXXYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZ remote_server (ED25519)
# パスフレーズなしで LOLIPOP! にログインできた
$ ssh lolipop
[lolipop-username@server ~]$ exit
ログアウト
Connection to ssh.lolipop.jp closed.
という事で、Ubuntu 22.04 LTS の新しめの ssh でも問題なく使用する事が出来ました。
まとめ
npiperelay.exe と socat を使用して、WSL2 の ssh から Windows11 ssh-agent を利用する際には、新しめの ssh を使用すると不具合が発生していました。
wsl2-ssh-agent を使用する事により Windows11 ssh-agent の不具合を回避することができ、新しめの ssh クライアントでも Windows11 ssh-agent の鍵を使用する事が出来ました。
これで Linux に ssh -A オプションで接続する場合を除いて、KeePassXC で秘密鍵の管理が可能になりました。あとは Linux だけですが…思案中です。(github 版 OpenSSH を入れるしか方法はないか…)
20230220 追記 : github 版の OpenSSH を試してみました。不具合は解消できました。
今回のアイキャッチ画像
Stable Diffusion で作成した雪景色の盆地です。そろそろ複数画像をまとめて出力できるように、Stable Diffusion の環境も整備しないと。
コメント