VS CodeでWSLを使っていると、ときどき起きること
普段はメイン端末でVS CodeとWSLを使っていても、たまにしか触らない端末を開くと、Linux側のパスワードをきれいに忘れていることがあります。sudo が通らないと更新も設定変更も止まるので、地味に困ります。
この場合、PowerShellからWSLをrootユーザーで起動し、対象ユーザーのパスワードを上書きすれば戻せます。少し紛らわしいのですが、忘れているのは「Windowsの管理者パスワード」ではなく、WSL内のLinuxユーザーに対するパスワードです。検索では「WSLのrootパスワードを忘れた」と書かれがちですが、実際の復旧作業としては、自分の通常ユーザーのsudo用パスワードを再設定する場面がほとんどです。
いちばん手早い再設定手順
以下では、WSL内の通常ユーザー名を user、再設定するパスワードを password と表記します。
いちばん短いのは、PowerShellからそのまま passwd を実行する方法です。
既定のWSLディストリビューションが対象なら、これで足ります。
wsl -u root passwd user
複数ディストリビューションを使っていて、対象を明示したいならこうします。
wsl -d Ubuntu -u root passwd user
新しいパスワードとして password を2回入力すれば完了です。
ディストリビューション名が分からないときだけ、先に一覧を見ます。
wsl -l -v
対話的に確認しながら進めたいなら、従来どおり root で入って passwd を打っても構いません。
wsl -d Ubuntu -u root
入れたら、パスワードを忘れたユーザーを指定して再設定します。
passwd user
新しいパスワードとして password を2回入力すれば完了です。いったんWSLを抜けて、通常ユーザーで入り直し、sudo が通るか確認します。
exit
wsl -d Ubuntu
sudo whoami
root と表示されれば戻っています。
うまくいかないときの確認点
ユーザー名が分からない
root で入ったあと、以下で確認できます。
ls /home
通常は表示されたディレクトリ名がユーザー名です。
既定ユーザーが崩れている
パスワードは直ったのに、起動時のユーザーが意図せず root になることがあります。その場合は /etc/wsl.conf の user.default を確認します。
cat /etc/wsl.conf
必要なら次の形にしておくと分かりやすいです。
[user]
default=user
反映はWindows側で一度WSLを終了してから行います。wsl.conf の変更は、ディストリビューション停止後に次回起動で反映されます。
wsl --shutdown
Microsoft Learn では、Store版のディストリビューションでは <DistributionName> config --default-user <Username> も案内されています。ただし、importしたディストリビューションではこの方法が使えないため、/etc/wsl.conf を見ておく方が汎用的です。
VS Code利用時に覚えておくと楽なこと
VS CodeのRemote - WSL拡張を使っていても、パスワード再設定そのものはPowerShell側から処理した方が早いです。WSLが起動できる限り、エディタ側で粘るより wsl -d <Distro> -u root の1行で片付くことが多いです。
久しぶりに使う端末ほど、こういう復旧手順だけは短くメモしておくのが正解です。なるほど、覚えるより残す方が安定します。
まとめ
WSLでsudoパスワードを忘れたときは、PowerShellから対象ディストリビューションをrootで起動し、passwd <ユーザー名>で再設定すればほぼ解決します。VS Codeの問題に見えても、実際にはWSL内ユーザーの認証情報の話なので、Windows側から入口を変えると案外あっさり戻せます。