WSL2安装
Windows安装WSL2 Ubuntu
本文详细介绍了如何在Windows10中使用WSL2,包括启动子系统和虚拟机平台的设置,WSL2版本切换,以及WSL的初始化,openSSh-server启动等操作。
WSL2 安装步骤
WSL2(Winodws Subsystem for Linux)是微软公司开发的一项创新性技术,它在Windows操作系统上提供了一个完整的Linux内核,并允许用户在Windows环境中运行Linux发行版。很早之前在Windows上使用Linux系统必须先安装VitualBox或VMWare,然后再安装Linux发行版,现在可以先安装WSL再安装Linux发行版,更少的内存占用,文件操作也更方便。
1. 启动子系统和开发者选项
启动计算机的开发者模式和Linux的Windows子系统
开发者模式开启:Windows开始键盘—-更新和安全—-开发者选项—-开发人员模式(开启)
搜索栏搜(控制面板)—-程序—-程序和功能—-侧边启用或关闭Windows功能—-适用于Linux的Windows子系统
2. 安装Linux
本步骤使用图形界面进行安装,没有使用命令行模式进行安装
在Windows中搜索Microsoft Store, 点击进入界面,可以搜索Ubuntu或者Linux,会出来不同版本的Ubuntu Figure 2, 这里选择的是Ubuntu20.04 LTS版本,点击下载等待即可。
如果网络被限制,此处可能会无法正常下载,就需要自行下载安装
| 项目 | LTS 版本(如 20.04) | 非 LTS 版本(如 20.10) |
|---|---|---|
| 发布频率 | 每两年 | 每六个月 |
| 支持时间 | 5年(可扩展到10年) | 9个月 |
| 稳定性 | 高 | 中 |
| 软件更新 | 稳定但较慢 | 快速、可能不稳定 |
| 适用场景 | 企业、服务器、长期使用 | 桌面测试、新技术体验 |
3. Ubuntu设置
在Ubuntu点击下载安装之后,会自动启动进入安装界面 经过几分钟的等待之后,Ubuntu就可以安装好,进入设置流程
- UNIX username
- New Password
- Retype new password
Linux安全模式,输入密码是不显示位数的
在Windows系统文件夹中查看Ubuntu系统文件
如图 Figure 4 显示的,在文件查找栏中输入 \\wsl$ 即可跳转到WSL2的Ubuntu子系统,点击即可查看Ubuntu系统文件,默认进入的是根目录
4. 开启OpenSSH-server
- 系统升级是必须做的
Ubuntu初级安装之后很多lib是没有的,需要进行系统补丁的维护和lib的安装。
如果没有科学上网,就需要更换比较快的镜像源,国内很多镜像源可以更换,在/etc/apt/source.list 更换即可,记得要先进行备份
在Ubuntu中输入下面的命令
sudo apt-get update
sudo apt-get upgrade新启动的可能需要加载更新较久
- 重新安装openssh-server
先将原始的卸载掉,再安装新的openssh-server,sudo 使用到超级权限,一开始设置就是自己为自己的root
sudo apt-get remove openssh-server
sudo apt-get install openssh-server- 配置ssh_config.d文件
重新安装好openssh-server后,进行设置文件的修改,主要是开通权限
sudo vim /etc/ssh/sshd_configvim是Ubuntu的文本编辑器,相当于windows中的文本记事本一样,进入config文件后,找到下图 Figure 4 中所标的位置,键盘按 ii,进入编辑模式,修改即可;修改好之后按 EscEsc,再按::, 输入wqwq}(意味着保存文件修改并退出当前文档)
- 生成密钥
SSH密钥对安全强度远高于常规用户密码,且从公钥逆向推出私钥的难度极高,可以杜绝暴力破解威胁。 通过使用SSH密钥对,可以实现免密登录,直接使用私钥通过SSH命令或相关工具登录目标实例。 支持登录多台Linux实例,更加方便地管理.
ssh-keygen -t rsa- ssh-keygen:生成 SSH 密钥对的命令
- -t rsa:指定密钥类型为 RSA(默认 3072 或 4096 位)
默认生成两份文件
| 文件 | 说明 |
|---|---|
~/.ssh/id_rsa |
私钥,必须保密 |
~/.ssh/id_rsa.pub |
公钥,可以放在远程主机的 ~/.ssh/authorized_keys |
输入后一直按EnterEnter 键即可完成创建
启动openSSH-server
sudo service ssh start5. 远程连接WSL
终端启用了Ubuntu,有很多的不方便,文件也不易传输,下载过久之后会出现卡断的现象,这个时候就需要远程连接Linux,使用各种方式都可以完成远程连接。
- 能够随时随地访问计算机(只要计算机不关)
- 安全性高,SSH公钥认证避免密码泄露风险
- 支持远程控制
- 稳定运行,长期在线,易于管理,易于传输文件等
常见的工具组合
| 工具/协议 | 用途 |
|---|---|
| SSH/Xshell | 远程终端连接 |
| SFTP/WinSCP/Xftp | 文件传输 |
| VS Code + Remote SSH 插件 | 远程开发 |
| Git | 代码版本管理 |
| Docker | 应用容器化部署 |
| systemd/crontab | 服务与任务自动管理 |
远程连接Linux服务器主要是通过 SSH(Secure Shell) 协议,这里使用的是Windows下面无需安装的MobaXterm平台,选择下载不安装免费版本即可,下载之后解压,点击进入文件夹,双击MobaXterm即可进入界面。
按照下图选择Session—-SSH—-Remote host输入(127.0.0.1)—-Specify username输入自己之前设置的Unix name—-点击OK,就提示输入密码即可进入终端
6. WSL开源
微软最近几年态度非常的open,开源了很多大的项目,看来开源是推动进步的主要因素,当然也有卷的缘故,但是无论怎么样,开源是好事情。
有感兴趣的各位可以去GitHub上自行了解学习,github链接 https://github.com/microsoft/WSL?tab=readme-ov-file
WSL1和WSL2 转换
当WSL1 对于一些软件不支持的时候,需要将WSL1转换到WSL2,比如WSL1不支持Node.js v24,无法执行现代 x86_64 ELF 二进制,在powershell中快速转换,5min即可搞定
- Windows中打开PowerShell(管理员)
wsl --set-default-version 2- 查看当前的WSL发行版名称
wsl -l -v示例输出:
NAME STATE VERSION
* Ubuntu-20.04 Running 1
- 把当前发行版本升级到WSL2
wsl --set-version Ubuntu-20.04 2耐心等到几分钟后即可完成转换
在Linux系统中,输入uname -a 即可查看
Linux RD 5.10.16.3-microsoft-standard-WSL2 #1 SMP Fri Apr 2 22:23:49 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
WSL2 本地连接和外部连接
在MobaXterm中连接WSL2(Ubuntu)时,本地连接(Localhost)和通过WSL直接连接是完全两种不同的访问方式
| 对比维度 | 通过 127.0.0.1 连接 WSL2 |
通过 wsl 方式连接 WSL2 |
|---|---|---|
| 连接本质 | 走 TCP/IP 网络栈 | 直接进入 WSL2 Linux 实例 |
| 使用方式 | ssh user@127.0.0.1 -p <port> |
MobaXterm → WSL Session / wsl -d Ubuntu |
| 是否经过 SSH | ✅ 是 | ❌ 否 |
| 是否需要 sshd | ✅ 必须运行 | ❌ 不需要 |
| 网络隔离 | 有(虚拟网卡 / NAT) | 无(进程级直连) |
| IP 概念 | 明确存在(127.0.0.1 / NAT) | 无 IP 概念 |
| 端口映射 | 需要配置端口 | 不需要 |
| 延迟与开销 | 略高(TCP + SSH) | 最低(本地进程) |
| 认证方式 | SSH key / password | Windows 用户上下文 |
| 连接稳定性 | 依赖网络与端口 | 非常稳定 |
| 支持端口转发 | ✅ 支持 | ❌ 不支持 |
| 适合远程工具 | 是(看起来像远程 Linux) | 否(仅限本机) |
| 可被其他设备访问 | ❌ 默认不行 | ❌ 不行 |
| 典型用途 | 模拟“远程服务器” | 本地 Linux 开发 |
1. WSL 127.0.0.1
通过WSL直接连接的好处就是方便,自动识别,快速连接,延迟也最低
MobaXterm
|
| ssh user@127.0.0.1:22
|
Windows TCP/IP (loopback)
|
| NAT / port forward
|
WSL2 Ubuntu (sshd)
- 在WSL Ubuntu 中安装并启动SSH
sudo apt update
sudo apt install -y openssh-server- 启动sshd
sudo service ssh start然后在mobaXterm中使用ssh进行连接,输入127.0.0.1,用户名,然后密码即可进行连接
2. 局域网连接
WSL2 默认是不支持通过局域网(LAN)连接 MobaXterm,可以通过 Windows 做端口转发(Port Proxy)实现。在局域网环境下,通过 MobaXterm 连接另一台机器上的 WSL2,最大的挑战在于 WSL2 的网络架构本质上是一个 NAT(网络地址转换)模式。这意味着 WSL2 的 IP 地址通常是内部私有的,局域网内的其他机器无法直接访问它。
由于外部机器只能看到“宿主机”的局域网 IP,我们需要在宿主机上做一个“路标”,把发往宿主机的 SSH 请求转发给内部的 WSL2
- 准备WSL2环境
- 在 WSL2 中执行:
sudo apt update && sudo apt install openssh-server - 编辑配置文件:
sudo nano /etc/ssh/sshd_config- 确保
PasswordAuthentication yes - 建议将端口改为
2222(避免与 Windows 自带的 SSH 服务冲突)。
- 确保
- 启动服务:
sudo service ssh restart - 获取 WSL2 的内部 IP:执行
hostname -I(假设为 172.20.10.5)
- 在宿主机(Windows)设置端口转发 以管理员权限打开PowerShell,运行下面的命令
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=172.0.0.1 connectport=2222- 放行防火墙
继续在管理员模式的PowerShell中运行,允许222端口通过Windows防火墙
netsh advfirewall firewall add rule name="WSL2_SSH" dir=in action=allow protocol=TCP localport=2222
New-NetFirewallRule -DisplayName "Allow WSL2 SSH from LAN" -Direction Inbound -Protocol TCP -LocalPort 2222 -Action Allow- 搜索windows本地的IP
在powershell中输入ipconfig搜索主机windowsIP
把本地IP输入到Remote name,端口改成2222
然后就可以通过MobaXterm进行连接了,按照正常的模式
WSL迁移到非系统盘
- 安装相关组件
打开控制面板—-> 程序 —-> 启用或关闭Windows功能 —-> 适用于Linux的Windows子系统 和 虚拟机平台 (勾选)—-> 确定
- 打包wsl
由于wsl会默认安装在C盘,会占用1GB的空间,会随着wsl的安装使用,占用空间越来越大,所以建议迁移到非系统盘,比如D盘或者E盘
- 查看安装的wsl子系统
wsl -l- 将子系统导出到tar文件
wsl --export Ubuntu-22.04 D:\WSL-Ubuntu\Ubuntu-22.04.tar- 注销原来的子系统
wsl --unregister Ubuntu-22.04- 在新的位置导入子系统
wsl --import 路径名 放置tar的文件路径
wsl --import Ubuntu-22.04 D:\WSL-Ubuntu D:\WSL-Ubuntu\Ubuntu-22.04.tarwsl2系统会放在一个ext4.vhdx文件中,所以的文件都写在此文件下
- 切换默认账户 在上述步骤完成后,启动wsl,会进入root账户,需要切换到自己设置的用户账户,需要修改WSL的默认登陆用户
echo -e "[user]\ndefault=erwin" >> /etc/wsl.conf更改之后,需要重启wsl,才能生效
wsl --shutdown wsl