wsl2に外部マシンからssh接続する際に問題になるのが、Windows再起動でwsl2のIPが変わる点です。
そこで発想を変えて、wsl2 にもう一つ固定IPを付与する(wsl2に2つ目のIPアドレスを固定的に振る)方法を紹介します。
管理者権限でやること:
ユーザー権限でやること:
@rem # Windowsのバッチを、必ず管理者権限で実行させる方法|なにがし|note
@rem # https://note.com/nanigashi/n/nbd9759140047
cd /d %~dp0
set WSL_DISTRIBUTION=Ubuntu-20.04
@rem 管理者特権が必要なコマンドを実行し、エラーだったら promotion に分岐
openfiles > NUL 2>&1
if NOT %ERRORLEVEL% EQU 0 goto promotion
@rem ここから管理者権限で実行させたい処理を記述
netsh interface ip add address "vEthernet (WSL)" 10.255.255.88 255.255.255.0
netsh interface portproxy add v4tov4 listenport=22 connectaddress=10.255.255.16
sc.exe start iphlpsvc
@rem 管理者権限のときは promotion 部分をスキップし end に飛ぶ
goto end
:promotion
@rem ここからユーザー権限で実行させたい処理を記述
wsl -d %WSL_DISTRIBUTION% -u root ip addr add 10.255.255.16/24 broadcast 10.255.255.255 dev eth0 label eth0:1
wsl sudo service ssh start
@rem 管理者権限で自分自身を実行(昇格処理)
powershell start-process %~nx0 -verb runas
:end
これを wsl2-ssh-forwarding.bat などの名前で保存し、
スタートアップディレクトリ(shell:startup)にショートカットを作成しておけば準備OKです。
Windowsを再起動し、ログインするとUAEのダイアログが表示されるので、OKをクリックしバッチファイルの実行を続けて下さい。