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.Server
為NotPresent
時,執行(這步完成後無需再次執行):
> 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