スポンサーリンク

wsl2-ssh-agent を使用して WSL2 ssh から Windows11 ssh-agent を利用する

雪化粧された盆地
記事内に広告が含まれています。
スポンサーリンク

Windows11 ssh-agent の不具合

WSL2 の ssh から 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 の記事です。

WSL2のOpenSSH Agent Relayが動かなくなったので調査した

Windows11 の ssh-agent の不具合ですので、現状ではどうしようもない状態でした。

スポンサーリンク

wsl2-ssh-agent について

この記事を作成して間もなく、Windows11 の ssh-agent の不具合を回避して、WSL2 ssh から利用するソフトウェアが公開されているのを知りました。

wsl2-ssh-agent: WSL2からssh-agent.exeサービスへのブリッジ

しかしこの手法は、最近の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
GitHub - mame/wsl2-ssh-agent: A bridge from WSL2 ssh client to Windows ssh-agent.exe service
A bridge from WSL2 ssh client to Windows ssh-agent.exe service - mame/wsl2-ssh-agent

こちらを使用してみました。

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 の環境も整備しないと。

コメント

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