基於SSH遠端訪問WSL2(非長期穩定版本)

yicheng_liu0219發表於2024-05-30

to 2024 / 05 / 31

目標

使筆記本可以在同一區域網下訪問主機的WSL2。

部署環境

HOST-OS: Windows10, WSL2 ( Ubuntu 20.04 )

REMOTE-OS: Windows10

VSCode-EXTENSION: WSL, Remote-SSH

部署過程 (主要參考[1,2])

WSL2所在主機需要進行的操作:

WSL2-bash

更新openssh-server:

sudo apt-get update
sudo apt-get install openssh-server

修改sshd配置資訊(注意是sshd_config 而不是ssh_config):

sudo vi /etc/ssh/sshd_config

增添如下內容(注意PasswordAuthentication可能以設定為no,將對應內容註釋掉):

Port 2222                   # 監聽的埠,可以是其它的
ListenAddress 0.0.0.0       # 0.0.0.0 表示所有的地址
PasswordAuthentication yes  # 把原來的no改成yes,意思是可以用密碼登入
PermitRootLogin yes         # 把原來的prohibit-password改成yes

ssh服務啟動/關閉:

sudo service ssh restart
sudo service ssh stop

WindowsPowerShell (Administrator)

> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : NotPresent

OpenSSH.ServerNotPresent時,執行(這步完成後無需再次執行):

> Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# 執行上述指令後,重新驗證結果應該如下
> Get-WindowsCapability -Online | ? Name -like 'OpenSSH*'

Name  : OpenSSH.Client~~~~0.0.1.0
State : Installed

Name  : OpenSSH.Server~~~~0.0.1.0
State : Installed

開啟SSHD服務(或者設定自動開啟):

Start-Service sshd
Get-Service sshd

Set-Service -Name sshd -StartupType 'Automatic'

將Windows埠轉發到WSL2:

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=IP connectport=2222

其中IP為WSL2-IP,需要在WSL2-bash中輸入指令ifconfig

$ ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet XXX.XXX.XXX.XXX  netmask XXX.XXX.XXX.XXX  broadcast XXX.XXX.XXX.XXX
        ...

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet XXX.XXX.XXX.XXX  netmask XXX.XXX.XXX.XXX
        ...

其中eth0:inet即為WSL2-IP。

開啟Windows防火牆對應埠入站規則:

netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2222

遠端連線電腦使用以下指令連線:

ssh WSL2-name@host-ip -p 2222

其中WSL2-name為WSL2內使用者名稱,host-ip可以在PowerShell中使用ipconfig查詢IPv4 地址,密碼為WSL2對應使用者登入密碼。可以配合VSCode中Remote-SSH外掛使用,結果同本地使用WSL外掛體驗相似。

參考資料

[1] SSH連線WSL2踩坑記錄與增加埠轉換規則,實現外網與WSL2的連線_ssh wsl2-CSDN部落格

[2] THE EASY WAY how to SSH into Bash and WSL2 on Windows 10 from an external machine

相關文章