LoginSignup
4
2

More than 1 year has passed since last update.

macOS から WSL Ubuntu に直接 SSH 接続する

Posted at

macOS クライアントから Windows 11 PC 内で動いている WSL2 環境の Ubuntu に直接 SSH ログインする手順です。

WSL 内で SSH サーバ sshd を起動しても、ネットワーク的に Windows 以外のリモートの SSH クライアントから WSL 内のサーバには直接接続できないため、Windows のプロキシ(ポート転送) portproxy を設定する。

なお、下記の手順では、Windows が起動する度に、毎回、手動でバッチファイルを実行する必要があります。
Windows には詳しくないので、タスクマネージャーで OS 起動時に自動で SSH も設定する手順は不詳です。

(1) WSL2 をセットアップする

(略)

(2) WSL 内に SSH 公開鍵をセットアップする

事前に作ってある SSH 公開鍵を ~/.ssh/authorized_keys に書き込んでおく。

# WSL 内で実行
mkdir ~/.ssh/
chmod 700 ~/.ssh/

cat > ~/.ssh/authorized_keys 
ssh-rsa AAxxxxxxx== 
^D (CTRL+D)
c
chmod 600 ~/.ssh/authorized_keys 

(3) PowerShell のスクリプトを作成する

https://zenn.dev/solufa/articles/accessing-wsl2-from-mobile の手順を参考にさせていただいて、
PowerShell のスクリプトを C:\Users\xxxx\WSL\WSL-SSH.ps1 あたりに作ります。
ここでは SSH の 22 番ポートと、オマケのサンプルとして 3000 番ポートの両方を転送する設定です。
同じポート番号で転送するため、Windows PC ホスト側では、SSH サーバは動いていないこと。

$ports = @(22, 3000) # ポート番号を配列で指定

$fwRuleName = "WSL 2 Firewall Unlock"

$wsl2Address = wsl -e hostname -I | ForEach-Object { $_.trim() }

New-NetFireWallRule -DisplayName $fwRuleName -Direction Inbound -LocalPort $ports -Action Allow -Protocol TCP

for ($i = 0; $i -lt $ports.length; $i++) {
  $port = $ports[$i]
  netsh interface portproxy delete v4tov4 listenport=$port
  netsh interface portproxy add v4tov4 listenport=$port listenaddress=* connectport=$port connectaddress=$wsl2Address
}

(4) バッチファイルを作成する

PowerShell 単体だけでも実現できるかもしれないけど、よく分からないので、
ここでは .bat ファイルを組み合わせる手順にしています。
バッチファイルを C:\Users\xxxx\WSL\WSL-SSH.bat あたりに作ります。

@echo off
wsl -u root -- service ssh start
powershell -c C:\Users\xxxx\WSL\WSL-SSH.ps1 -Verbose
wsl -l -v
wsl -u root -- service ssh status
ipconfig | find "IPv4"
pause

(5) バッチファイルのショートカット(リンク)を作成する

netsh を実行する関係で、バッチファイルは管理者権限で実行したい。
WSL-SSH.bat のショートカットを作成して、
プロパティ > ショートカット > 管理者として実行 を ON にする。
shortcut.jpg

(6) ショートカット側を実行する

ショートカットのファイルをダブルクリックして、実行する。(管理者権限の承認が必要)
Ubuntu Runningsshd is running が確認できれば OK。
最後に Windows PC の IP アドレスを確認できる。この環境では 192.168.11.39 だった。
Windows PC を再起動した場合は、もう一度、このショートカットから実行する必要がある。

ip-address.png

(7) SSH 接続する

macOS 側から WSL2 側に直接 SSH 接続できるようになりました。🎉
xxxx@ のユーザ名の部分は、Windows 側でなくて Ubuntu 側のユーザ名を指定します。

$ ssh xxxx@192.168.11.39

Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.15.57.1-microsoft-standard-WSL2 x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Mon Oct 10 01:12:28 JST 2022

  System load:  0.0                 Processes:             8
  Usage of /:   3.9% of 1006.85GB   Users logged in:       0
  Memory usage: 3%                  IPv4 address for eth0: 172.17.187.192
  Swap usage:   0%

Last login: Mon Oct 10 00:58:06 2022 from 172.17.176.1

$
4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2