【メモ】WSL2上のsshサーバに外部から接続する

Windows10にWSL2を設定してUbuntuをインストールしている状態で、sshサーバーを起動して外部のコンピューターから接続することができます。


ただし、WSL2の内部ではホストとなるWindows10とは違うネットワークが使われているためにポートフォワードする必要があります。sshであれば22/tcpをポートフォワードするように設定します。

ところが、WSL2のネットワークは起動する度にアドレスが変更されてしまいますので、固定的にポートフォワードを設定するだけではsshサーバーに到達することができません。

そこで、Windows10とWSL2にインストールしたUbuntuに動的にポートフォワードするような設定を追加していきます。

Ubuntuにsshサーバーをインストール

最初に、Ubuntuにsshサーバーをインストールします。ここでは、openssh-serverをインストールすることにします。

$ sudo apt install -y openssh-server

これだけでは、ホストキーが正しくない場合がありますので、次のようにして作成しておきます。

$ sudo ssh-keygen -A

ポートフォワード用のスクリプトを作成

Windows側から呼び出して実行するスクリプトを作成しておきます。

$ sudo vi /usr/local/bin/port-forward.sh
#!/bin/bash

IP=$(ifconfig eth0 | grep 'inet ' | awk '{ print $2 }')

netsh.exe interface portproxy delete v4tov4 listenport=22
netsh.exe interface portproxy add v4tov4 listenport=22 connectport=22 connectaddress=$(IP)

exit 0
$ sudo chmod +x /usr/local/bin/port-forward.sh

Windows10側のnetsh.exeコマンドでポートフォワードの設定をしているのですが、WSL2上のUbuntuでないと割り当てられているネットワーク・アドレスがわからないのでスクリプトをUbuntu側に作成しています。

Windows10側にバッチ・スクリプトを作成

上記のようにUbuntu側に作成したスクリプトを実行するためのバッチファイルをWindows10側に作成します。作成する場所は、%USERPROFILEとして「port-forward.bat」という名前で作成しています。

WSL --exec bash /usr/local/bin/port-forward.sh

WSL --exec sudo service ssh restart

WSL2側のUbuntuで実際のポートフォワードの設定を実行しているのですが、sshサーバーが正常に起動していないことがあるためserviceコマンドで再起動しています。

タスクスケジューラの設定

スクリプトの準備ができましたので、これらを自動実行するための設定を追加します。Windows10では、タスクスケジューラを使うことができますから検索して画面を開きます。

タスクスケジューラの画面

「タスクの作成」で、「全般」に入力していきます。
・「名前」は、任意の名前を入力します。
・「ユーザーがログオンしているかどうかにかかわらず実行する」にチェックを入れます。
 一応、「パスワードを保存しない(P)(タスクがアクセスできるのはローカルコンピューターリソースのみ)」にもチェックを入れています。
・大事なのは、「最上位の特権で実行する」にチェックを入れておくことです。
・「構成」は「Windows 10」を選択しています。

タスクスケジューラ「全般」の設定

「トリガー」は、「スタートアップ時」としています。

タスクスケジューラ「トリガー」の設定

「操作」では、「新規」をクリックしてプログラムスクリプトを「参照」から選択して設定しています。

タスクスケジューラ「操作」の新規追加

以上の設定をしたら、「OK」ボタンで新しいスケジュールを追加します。

再起動して設定を確認


以上が正しく設定できていれば、Windowsを再起動して外部のコンピューターからsshで接続することができます。

正常にポートフォワードの設定ができていれば、PowerShellからnetshコマンドで確認することができます。

PS C:\Users\User> netsh.exe interface portproxy show v4tov4

ipv4 をリッスンする:    ipv4 に接続する:

Address    Port    Address    Port
----------------- ------------- --------------- ----------
* 22 172.29.111.92 22

以上で、便利になったWindows10のWSL2を使用して更にsshも使用できるようになります。

この記事をシェアする
目次
閉じる