Windows 11のWSLでGitへSSH接続時に毎回パスワードが要求されるようになった
去年夏頃に買ったばかりなのに、先月SSDが壊れてしまったWindows 11のノートPC。(壊れた原因は、おそらく以前ケーブル引っ掛けてローテーブルから勢いよく落っことしてしまったことだと思うので、自分のせい)
最近のFlow Launcherプラグイン作成やGoの勉強などで活用し始めたところだったので、コミットしていなかったソースなどもあってちょっとショックでしたが、とりあえずSSDを交換して再セットアップし始めました。
環境構築は以前Windows 10で実施したことをベースに実施。
Windows Terminalが標準搭載されていたり、WSLのインストールが wsl --install
一発で済むようになっていたり、デフォルトでセットアップされるWSLのOSがUbuntu 22.04になっていたりと多少の違いはあるものの、Windows 11でもおおむね同じ手順で構築できました。
GitのSSH接続で問題発生
上記手順で実施しているように、WindowsとWSL側でSSHキーを共有して使うようにすることもできてはいたのですが、なぜかWSL側からGitHubへfetchやpushなどでSSH接続するときに毎回パスワードを求められる症状が出ていました。( ssh-add -l
で鍵が追加されていることは確認できているものの、コマンド実行時にパスワードを求められる)
ssh configをいじってみたりして調べていたのですが、どうやらWindows 11に標準で入っているOpenSSHとUbuntu 22.04のもののバージョンの組み合わせの関係で、うまく動いていないとのこと。
Windows11 github 版 OpenSSH beta を使ってみた ~ ssh-agent の不具合対処 ~
上の記事を見て、新しいバージョンのOpenSSHを利用することで問題を解消できるようなので、入れ替えてみることにしました。
環境
項目 | 情報 |
---|---|
OS | Windows 11 Home 22H2 (OSビルド 22621.1413) |
WSL | Ubuntu 22.04.2 (Kernel: 5.15.90.1-microsoft-standard-WSL2) |
このときのWindows 11側のSSHとGitのバージョンを確認。
>ssh -V OpenSSH_for_Windows_8.6p1, LibreSSL 3.4.3 >git --version git version 2.40.0.windows.1
WSL側。
$ ssh -V OpenSSH_8.9p1 Ubuntu-3ubuntu0.1, OpenSSL 3.0.2 15 Mar 2022 $ git --version git version 2.40.0
参考にした記事の内容のとおり、Windows側のOpenSSHが8.6に対し、WSL側はそれより新しい8.9なので、やはり同じ問題と思われる。
今となってはうろ覚えですが、SSD交換前の最初のセットアップしたときは、まだUbuntu 20.04だった気がするので、この問題に遭遇しなかったのかな。
Windows 11のOpenSSHアンインストールする
設定→アプリ→オプション機能内のインストールされている機能から「OpenSSHクライアント」をアンインストール。
実行すると再起動を求められるので実施。
>ssh -V 'ssh' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。
ssh
コマンドが使えなくなったことも確認。
OpenSSH Betaをインストールする
新しいOpenSSHはGitHubで公開されているのですが、ややこしいですが、関係するリポジトリが2つあるもよう。
- PowerShell/openssh-portable - 開発用
- PowerShell/Win32-OpenSSH - リリース管理用(以前開発で使われていたみたい)
インストールはwingetで入れられるようなので、実行。
>winget search openssh 名前 ID バージョン ソース ------------------------------------------------------ OpenSSH Beta Microsoft.OpenSSH.Beta 9.2.0.0 winget >winget install --id Microsoft.OpenSSH.Beta
必要なPATHも登録してくれるので、Chocolatey付属の refreshenv
で環境変数を読み直すと、新しいバージョンの ssh
がインストールされていることが確認できました。
>refreshenv Refreshing environment variables from registry for cmd.exe. Please wait...Finished.. >where ssh C:\Program Files\OpenSSH\ssh.exe >ssh -V OpenSSH_for_Windows_9.2p1, LibreSSL 3.6.1
標準のOpenSSHのときはコマンドのパスが C:\Windows\System32\OpenSSH\ssh.exe
でしたが、 Program Files
配下に入っています。
git
コマンドがSSH接続するときに新しい ssh
コマンドを利用してくれるように、環境変数 GIT_SSH
も上記パスに変更しておきます。
GIT_SSH=C:\Program Files\OpenSSH\ssh.exe
また、SSHサーバー機能は使わないので、サービスに追加される「OpenSSH SSH Server」は無効にして停止しておきました。
動作確認
まずは入れ直したWindows側。
>ssh-add -l 256 SHA256:viFFe3jewdQrTIxOGzz660Pg+xxxxxxxxxxxxxxxxxx my_email@gmail.com (ED25519) REM A project >git fetch
SSHキーがssh-agentに登録されている状態で git fetch
しても、パスワードは求められません。
次にWSL側。
$ ssh-add -l 256 SHA256:viFFe3jewdQrTIxOGzz660Pg+xxxxxxxxxxxxxxxxxx my_email@gmail.com (ED25519) $ ssh -T git@github.com Hi umi-uyura! You've successfully authenticated, but GitHub does not provide shell access. # A project $ git fetch
こちらもWindows側で登録したSSHキーが確認でき、同様に git fetch
でパスワードは求められませんでした。
現時点ではベータ版という位置づけですが、新しいOpenSSHが標準搭載されるまでは、しばらくこちらのOpenSSHを使うことになりそうです。