下記の記事に記載されているsshサーバ自動起動スクリプトの(特定環境での)バグフィックス版
いずれの記事にもあるように、下記のバッチファイルを、タスクスケジューラでログイン時に自動起動するように登録している。
wsl -d Ubuntu -u root exec service ssh restart
for /F %%i in ('wsl -d Ubuntu exec hostname -I') do (
set ip=%%i
netsh interface portproxy delete v4tov4 listenport=22
netsh interface portproxy add v4tov4 listenport=22 connectaddress=%ip%
)
しかし、これを、
「wsl -d Ubuntu exec hostname -I で表示されるIPアドレスが複数ある環境」で実行すると、
- forループ(6行目)でIPアドレスを指定してsshdのlistenポートをaddして、
- その次のforループ(5行目)で全てのsshdのlistenポートをdeleteしてしまうので、
「最後にaddしたIPアドレスしかlistenできていない」ことになる。
修正版のバッチファイルが以下のもの。
wsl -d Ubuntu -u root exec service ssh restart
netsh interface portproxy delete v4tov4 listenport=22
for /F %%i in ('wsl -d Ubuntu exec hostname -I') do (
set ip=%%i
netsh interface portproxy add v4tov4 listenport=22 connectaddress=%ip%
)
オリジナルから5行目をforループの前に持っていっただけだが、
- forループの前(3行目)で、それまでの全てのsshdのlistenポートをdeleteし、
- forループの中(6行目)で、指定したIPアドレスに対してaddする、
としている。