Windows安装WSL2,开启ssh连接,并使其在后台常驻
玩了一段时间 Hermes 后,觉得2C2G的服务器实在是有点不够用,常驻跑 stt + 三个profile + docker虚拟化环境 + camofox浏览器,经常爆内存。恰好最近又总是听到关于 WSL 的讨论,感觉挺有缘份,便打算装个 WSL,把工作站当服务器使。然后今年正好 Ubuntu 26.04 LTS 版本也发布了,还没玩过,就拿 WSL 去尝尝鲜吧!
1.下载wsl2
系统版本:wsl2要求Windows 10 版本 2004(内部版本 19041)或更高版本。可以按 Win + R,输入 winver 并回车来查看版本。
使用一键安装命令进行安装(推荐):
这是微软官方推荐的最简单方式。
-
右键点击“开始”菜单,选择 “Windows PowerShell (管理员)” 或 “终端 (管理员)”。
-
在打开的窗口中输入以下命令并回车:
wsl --install注意:如果你的系统版本较旧,此命令可能无效,请采用其他方式安装。
-
重启电脑(必要操作)。
-
可以通过
wsl -l -v命令查看当前状态,如果显示 “没有安装的分发版”,就得自行装系统。 -
装系统: 使用
wsl.exe --list --online列出可用的分发和wsl.exe --install <Distro>进行安装。wsl --install Ubuntu-26.04 -
之后 Ubuntu 会要求你创建用户名和密码。
-
完成后退出,此时再使用
wsl -l -v命令,看到VERSION一列显示为2,就说明WSL 2 已成功安装并运行。
2.禁用C盘挂载
WSL 默认是能够访问 windows 系统里的文件的,会通过挂载的方式将 windows 系统中的盘符挂载到 /mnt 目录,如果觉得不安全,想禁用挂载的话,在 WSL 里执行:
sudo vim /etc/wsl.conf
写入:
[automount]
enabled = false #关闭自动挂载,默认挂载windows全部的文件
[interop]
appendWindowsPath = false # 默认关闭增加windows的path
在 CMD 中执行 wsl --shutdown,再重新打开 WSL。这样就关闭了挂载全部文件,如果还是需要一个通道,让wsl连接上windows的话,可以挂载指定 windows 指定文件夹。
# 短时间挂载:
sudo mount -t drvfs C:/Users/USER/Desktop/Project/ubuntu ~/desktop
# 永久挂载:
echo 'C:/Users/USER/Desktop/Project/ubuntu ~/desktop drvfs defaults 0 0' | sudo tee -a /etc/fstab
3.启用SSH
依旧采用 Tailscale 方案。在 WSL 里也装 Tailscale,使 WSL Ubuntu 会变成 Tailnet 里的一个独立设备,这样不用折腾 Windows 端口转发,也不怕 WSL 的 172.31.x.x 地址重启后变化。
在 WSL 上执行:
sudo apt update
sudo apt install -y curl openssh-server
curl -fsSL https://tailscale.com/install.sh | sh
sudo systemctl enable --now ssh
sudo systemctl enable --now tailscaled
sudo tailscale up --hostname=workstation-wsl
然后在其他机器上:
ssh 你的WSL用户名@workstation-wsl
4.关闭自动挂起
微软设计 WSL 的初衷是把它当做一个“用完即扔”的轻量级工具,所以默认只要没有打开的终端窗口,Windows 就会在几分钟后强制挂起(Suspend)WSL 的虚拟机来省内存。如果想让它常驻后台,可以通过以下配置来调整 WSL 的行为(但在某些 windows 环境下未必有效)。
1. 找到或创建配置文件:在Windows的文件资源管理器地址栏输入 %UserProfile% 并回车,进入你的用户文件夹。在这里新建一个名为 .wslconfig 的文件(默认情况下是没有的,如果已有则直接编辑)。
2. 写入配置:用记事本打开该文件,粘贴以下内容:
[wsl2]
vmIdleTimeout=-1
3. 重启 WSL:保存文件后,必须完全重启 WSL 才能让配置生效。在 PowerShell 或 CMD 中执行以下命令:
wsl --shutdown
之后再重新打开 WSL 终端,然后关闭,验证其状态是否一直为 running 。
如果上述方式无效的话可以使用终极方案:养一个幽灵进程,在终端配置文件里加几行代码,让它每次启动时自动在后台挂起一个完全不占资源的 sleep 进程。步骤如下所示:
- 打开 WSL 终端,编辑配置文件:
vim ~/.bashrc
-
在文件最末尾,另起一行加上这段代码:
# 欺骗 WSL,防止关闭终端后系统自动休眠 if ! pgrep -f "sleep infinity" > /dev/null; then nohup sleep infinity >/dev/null 2>&1 & fi -
保存退出,然后执行
source ~/.bashrc命令让它立刻生效。 -
然后在 powershell 中执行:
powershell -c "Start-Process wsl.exe -WindowStyle Hidden; pause"
Start-Process wsl.exe -WindowStyle Hidden→ 启动一个隐藏窗口的 WSL 进程。pause→ 让 PowerShell 窗口保持打开
这下,这个 sleep infinity 进程就会作为用户进程默默留在后台。无论怎么关闭终端窗口,WSL 都会因为这个进程的存在,判定“用户还在活跃”,从而乖乖地一直运行了!