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 の記事です。
Windows11 の ssh-agent の不具合ですので、現状ではどうしようもない状態でした。
wsl2-ssh-agent について
この記事を作成して間もなく、Windows11 の ssh-agent の不具合を回避して、WSL2 ssh から利用するソフトウェアが公開されているのを知りました。
しかしこの手法は、最近の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 の環境も整備しないと。
コメント