概要
リモートマシン(Windows)で稼働するWSL2へローカルマシン(Mac)からSSH接続する。
環境
Machine
- Win(リモートマシン)
- Microsoft Windows 11 Pro Build 10.0.22000
- WSL2 - Ubuntu-20.04
- OpenSSH_8.2p1 Ubuntu-4ubuntu0.5, OpenSSL 1.1.1f 31 Mar 2020
- Mac(ローカルマシン)
- macOS 12.5.1 Build 21G83
- OpenSSH_8.6p1, LibreSSL 3.3.6
Network
Mac(192.168.10.5)からWSL2(172.28.219.185)へSSH接続したい。
設定
Win
Windowsファイアウォールの設定
コマンドプロンプトを管理者として実行して、下記のコマンドを実行して、ファイアウォール規則を設定する。
> netsh advfirewall firewall add rule name="WSL2" dir=in action=allow protocol=TCP localport=10022
home LAN側から192.168.10.10:10022へ接続できるようになる。
Windows Defenderファイアウォールの設定の確認
下記のコマンドを実行して設定を確認する。
> netsh advfirewall firewall show rule name="WSL2" verbose
規則名: WSL2
----------------------------------------------------------------------
有効: はい
方向: 入力
プロファイル: ドメイン,プライベート,パブリック
グループ:
ローカル IP: 任意
リモート IP: 任意
プロトコル: TCP
ローカル ポート: 10022
リモート ポート: 任意
エッジ トラバーサル: いいえ
インターフェイスの種類: 任意
セキュリティ: NotRequired
規則のソース: ローカル設定
操作: 許可
ポートプロキシの設定
コマンドプロンプトを管理者として実行して、下記のコマンドを実行して、ポートプロキシを設定する。
> $wslipaddr = wsl -e hostname -I # WSL2側のアドレスを取得 172.28.219.185が入る
> netsh interface portproxy add v4tov4 listenport=10022 connectaddress=$wslipaddr connectport=22
192.168.10.10の10022ポートに接続すると、172.28.219.185の22ポートへフォワードされる。
ポートプロキシの設定の確認
下記のコマンドを実行して設定を確認する。
> netsh interface portproxy show all
ipv4 をリッスンする: ipv4 に接続する:
Address Port Address Port
--------------- ---------- --------------- ----------
* 10022 172.28.219.185 22
Mac
fooは接続先(WSL2)のユーザ
~/.ssh/config
Host wsl2
Hostname 192.168.10.10
User foo
Port 10022
WSL2
前提:sshdが起動している
接続
Macからssh wsl2
を実行して、WSL2へ接続する。
残件
WSL2のIPアドレスは起動ごとに変わるので、上記の設定方法だと、netshでポートプロキシを設定し直す必要がある。自動設定のスクリプトなどで対応したい。
参考情報