配置安装

环境要求

windows10版本大于20H1

升级工具链接:https://www.microsoft.com/zh-cn/software-download/windows10

启用适用于 Linux 的 Windows 子系统

1
2
#管理员
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

启用虚拟机功能

1
2
# 管理员
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

下载 Linux 内核更新包

https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi

将 WSL 2 设置为默认版本

1
wsl --set-default-version 2

安装linux子系统

Microsoft Store:https://aka.ms/wslstore

实现局域网访问

设置支持root远程登录

安装ssh服务

1
2
sudo apt-get remove openssh-server
sudo apt-get install openssh-server

Ubuntu设置root密码

1
sudo passwd root

修改/root/.profile文件

1
2
# mesg n || true
tty -s && mesg n || true

编辑配置文件/etc/ssh/sshd_config

1
2
3
4
Port 22 #默认即可,如果有端口占用可以自己修改
PasswordAuthentication yes # 允许用户名密码方式登录
# PermitRootLogin without-password
PermitRootLogin yes # 允许root用户登录

重启ssh

1
sudo service ssh restart

给 WSL2 设置静态 IP 地址

WSL2 会在启动时做网络适配器的配置,我们需要在启动后重新为其配置网络

1
2
3
4
5
6
# 将 WSL2 的网关设置为 192.168.50.1,并为 WSL2 分配 192.168.50.2 的 IP 地址
# 删除掉 WSL2 已经配置的 IP 地址,然后为其分配 192.168.50.2/24,最后配置路由并指定 DNS Server
sudo ip addr del $(ip addr show eth0 | grep 'inet\b' | awk '{print $2}' | head -n 1) dev eth0
sudo ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0
sudo ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0
sudo echo nameserver 192.168.50.1 > /etc/resolv.conf

对 WSL2 使用的 Internal Virtual Switch 进行配置,PowerShell

1
2
3
4
5
# 找到 vEthernet (WSL) 这个网络适配器,然后将其所有已有的 IP 地址删除,为其添加 192.168.50.1/24 的 IP 地址,最后设置 NAT:首先删除名字叫做 WSLNat 的 NAT(因为我们后续创建的 NAT 名字叫做 WSLNat,这些命令每次启动系统后都需要执行,因此可能系统中已经存在名为 WSLNat 的 NAT 了,为了防止冲突,如果存在的话就先删掉) ,然后创建一个名字叫做 WSLNat 的 NAT,设置内部地址为 192.168.50.0/24
Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False
New-NetIPAddress -IPAddress 192.168.50.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'
Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False
New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.50.0/24;

一键配置

管理员运行.bat或.cmd

1
2
3
4
5
6
wsl -d Ubuntu-20.04 -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d Ubuntu-20.04 -u root ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0
wsl -d Ubuntu-20.04 -u root ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0
wsl -d Ubuntu-20.04 -u root echo nameserver 192.168.50.1 ^> /etc/resolv.conf
powershell -c "Get-NetAdapter 'vEthernet (WSL)' | Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 192.168.50.1 -PrefixLength 24 -InterfaceAlias 'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.50.0/24;"
wsl sudo service ssh restart

问题

开启SSHD服务失败

现象
sshd: no hostkeys available — exiting
解决

1
2
3
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# 如果上述两个文件存在,仍然出现这个错误,那么chmod 600 上述两个文件