Windows上のPowerShellからWSL2へsshできるようにしましたが、本来やりたいのはLinuxマシンからWSH2へのsshアクセスで、Windowsの外からsshできるようにする必要があります。
そのためにはWindowsのPort Forwardingとファイアウォールの穴あけを設定します。
Windows上からWSL2のIPアドレスに対して、sshすることが確認できたわけで、LinuxマシンからWSL2にsshするには起動毎に変わるWSL2のIPアドレスも含めてWindowsのIPアドレスでアクセスできるようにPort Forwardingの設定をする必要があります。
Port Forwardingの設定する次の内容のスクリプトを /usr/local/bin/port-forwarding.shに用意します。
#!/bin/bash
IP=$(ip address show eth0 | grep 'inet ' | awk '{print $2}' | sed 's/\/.*$//')
netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add v4tov4 listenport=22 connectaddress=$IP
sc.exe config iphlpsvc start=auto
sc.exe start iphlpsvc
このスクリプトはWSL2上で実行するのですが管理者権限で起動する必要があるのでWindows側から起動します。
具体的には管理者権限で起動したPowerShell上で次のように実行します。
wsl -d Ubuntu-20.04 -u root --exec /bin/bash /usr/local/bin/port-forwarding.sh
上記のコマンドを毎度、入力するのも面倒なので次のようにport-forwarding.batというバッチファイルを作成します。
wsl -d Ubuntu-20.04 -u root --exec /bin/bash /usr/local/bin/port-forwarding.sh
wsl -d Ubuntu-20.04 -u root --exec /bin/bash service ssh start
さらにport-forwarding.batのショートカットを作成して管理者権限で実行できるようにします。
上図の詳細設定から下図の「管理者として実行」にチェックを付けるとショートカットを管理者権限で実行できます。
そうすると、デスクトップ上などに配置してダブルクリックするとPort Forwardingの設定が有効になります。
ファイアウォールが設定されているとPort Forwardingを設定してもLinuxマシンからアクセスできないのでポートを開放します。
コントロール パネル > システムとセキュリティ > Windows Defender ファイアウォールにから詳細設定でsshの22番ポートを受信可能にします。
これでLinuxマシンからWSL2にsshすることができるようになったのでWSL2からLinuxマシン、LinuxマシンからWSL2の両方向にsshできる環境が整いました。
ファイアーウォールの穴あけをしているのでセキュリティの管理は自己責任です。
そして、LinuxマシンからWSL2にsshする場合、Windowsでログイン状態にしてWSL2を起動しておかなければいけません。
例えば、遠隔からWindowsを起動してそのままWSL2にアクセスできるようにするにはWindowsの起動時に自動でログインできるようにすることと、Port Forwardingをログイン時に実行できるようにしなければいけません。