背景
一台Windows电脑,开启WSL2服务,其他电脑通过远程访问WSL。
(本文除了一些基本配置外,还有一些方便使用的可选配置)
安装wsl
在windows命令行中运行
wsl --install -d ubuntu
然后设置ubuntu的名称/密码
设置wsl不加载windows的环境变量PATH(可选)
默认情况下wsl会加载windows的环境变量,会导致一些命令重突。
- 设置wsl的配置
在wsl中运行
添加如下内容sudo nano /etc/wsl.conf
[interop] appendWindowsPath = false
- 重启wsl
在window下运行如下wsl --shutdown wsl
设置wsl启动方式为systemd
(可选)
Windows WSL 默认使用很老的init启动方法,我们换成新的systemd。
- 设置wsl的配置
在wsl中运行
添加如下内容sudo nano /etc/wsl.conf
[boot] systemd=true
- 重启wsl
在window下运行如下wsl --shutdown wsl
wsl安装ifconfig(可选)
- 在wsl中运行
sudo apt install net-tools
固定windows虚拟网卡
wsl与windows之间通过虚拟网卡实现网络连接。
每次wsl启动时会检测windows虚拟网卡是否开启,如果没有开启,则随机创建一个,由于IP是不固定的,会影响后续使用。
我们以固定地址192.168.50.1
为例。
在Windows下:
1. 首先判断windows有没有安装powershell Hyper-V模块
bash Get-Module -Name Hyper-V
2. 如果没有输出,则需要安装
3. 首先启用Hyper-V
4. 安装powershell模块
bash Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-Management-PowerShell
5. 创建一个powershell脚本文件如下
bash wsl # 第一步启动wsl,创建虚拟适配器 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;"
6. 创建以上文件的快捷方式,添加到C:\Users\XXX\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
下。
这样Windows每次开机都会为wsl创建一个固定IP的虚拟网卡。
注意这个脚本需要管理员权限执行。
固定wsl每次启动时的ip
wsl每次启动的时候会随机生成ip。
这一部分目前暂时没有找到很好的方法。
一种方法是写一个配置脚本,每次启动wsl后运行一下,重新设置一下wsl ip
- 在windows下创建脚本
wsl -d Ubuntu -u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0 wsl -d Ubuntu -u root ip addr add 192.168.50.2/24 broadcast 192.168.50.255 dev eth0 wsl -d Ubuntu -u root ip route add 0.0.0.0/0 via 192.168.50.1 dev eth0 wsl -d Ubuntu -u root echo nameserver 202.103.24.68 ^> /etc/resolv.conf
- 每次wsl启动时,在windows下运行以上脚本。
注意这个脚本需要管理员权限执行。
设置wsl开机启动并不会自动退出(可选)
将wsl驻留化会占用一定的内存。
(待更新)
将wsl sshd端口映射到windows
在windows命令行(管理员)下运行
netsh interface portproxy add v4tov4 listenport=9091 connectaddress=192.168.50.2 connectport=9091
查看是否成功
netsh interface portproxy show all
输出如下
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
* 9091 192.168.50.2 9091
设置wsl的交换空间swap大小(可选)
如果电脑的硬件RAW很小,分给wsl用的RAW也很小,我们可以适当增大wsl的swap空间,通过磁盘缓解RAW不足。
参考Configuration setting for .wslconfig
- 在windows用户目录下(
C:/User/XXX
)创建.wslconfig
文件,内容如下:[wsl2] swap = 8GB
- 重启wsl后,在命令行输入
free -m
已经扩大到8GBtotal used free shared buff/cache available Mem: 7885 253 7574 0 57 7474 Swap: 8192 34 8157
设置wsl的pip清华源
- 在wsl下运行
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
设置ssh只允许密钥访问
-
打开ssh配置文件
sshd_config
PubkeyAuthentication yes # 公钥访问 PasswordAuthentication no # 禁止密码