logo头像
Snippet 博客主题

WSL2安装与使用指南

一、WSL2安装与卸载

1-1、安装WSL

一键安装(推荐)
1
wsl --install

此命令会自动完成:

  • 启用必要的 Windows 功能
  • 安装最新的 Linux 内核
  • 默认安装 Ubuntu 发行版

安装完成后需要重启计算机

image-20260120235112242


1-2、WSL常用命令

命令说明
wsl启动默认发行版
wsl --list --online查看可安装的发行版
wsl --list查看已安装的发行版名称
wsl --list --verbose显示已安装的发行版名称、运行状态和WSL版本
wsl -d Ubuntu-22.04启动指定发行版
wsl --shutdown关闭所有正在运行的发行版
wsl --update更新 WSL
wsl --version查看 WSL 版本
wsl --set-default Ubuntu-22.04设置默认发行版
wsl --set-version Ubuntu-22.04 2转换发行版版本(WSL 1 ↔ WSL 2)

1-4、注意事项

  • 安装 WSL 需要管理员权限
  • 卸载发行版会完全删除所有数据,卸载前请备份
  • WSL 2 性能更好,推荐使用

1-4、常见问题排查

❌ 问题1:计算机不支持WSL2

image-20260123111656607

在powershell下输入wsl -l -v 也不显示版本

首先确保Hyper-v和适用于linux的windows子系统以及虚拟机平台是开启的

image-20260123111934330

如果这些都没问题,在powershell(管理员模式)下输入如下命令

1
bcdedit /enum | findstr -i hypervisorlaunchtype

应该会显示off,那就说明有问题,那就再输入

1
bcdedit /set hypervisorlaunchtype Auto

即可解决



二、安装AlmaLinux-9系统

一般企业服务器都是用的**CentOS Linux系统,由于其2021 年底终止更新,于是乎企业环境中出现了CentOS 替代方案** Rocky LinuxAlmaLinux等等

2-1、AlmaLinux-9包管理工具

默认使用 dnf(Dandified Yum)
它是 yum 的下一代版本,在语法上几乎完全兼容 yum

换句话说:

在 AlmaLinux-9 上,yum 命令仍然可以用,但底层实际上调用的就是 dnf

2-2、卸载Ubuntu Server

在 **PowerShell(管理员)**中执行:

1️⃣ 查看已安装的发行版

1
wsl --list --verbose

2️⃣ 注销并卸载(特定发行版)

1
wsl --unregister Ubuntu

根据你安装的具体发行版名称,例如:

1
2
wsl --unregister Ubuntu-22.04
wsl --unregister Debian

⚠️ 注意:这会删除该发行版的所有数据!


验证卸载

1
2
3
4
5
# 检查是否还有发行版
wsl --list

# 查看 WSL 版本
wsl --version

如果显示为空或报错,说明卸载成功。

2-3、开始安装

在 PowerShell 中执行:

1
wsl --install AlmaLinux-9

安装过程:

  • 系统会开始下载AlmaLinux镜像(文件较大,请耐心等待)
  • 显示进度条:正在下载: AlmaLinux OS 9 [====70.3%====]
  • 下载完成后开始安装
  • 安装完成后会显示:已成功安装分发。可以通过 "wsl.exe -d AlmaLinux-9" 启动它

2-4、安装完成标志

1
2
3
4
5
正在安装: AlmaLinux OS 9
已成功安装分发。可以通过 "wsl.exe -d AlmaLinux-9" 启动它
正在启动 AlmaLinux-9...
Please create a default UNIX user account.
Enter new UNIX username:

2-5、初始化系统

第一步:启动AlmaLinux
1
wsl -d AlmaLinux-9
第二步:创建UNIX用户账户

系统会提示输入以下信息:

1
2
3
Please create a default UNIX user account. The username does not need to match your Windows username.
For more information visit: https://aka.ms/wslusers
Enter new UNIX username:

输入步骤:

  1. 输入用户名(例如:admin

    1
    Enter new UNIX username: admin
  2. 设置密码(输入时不会显示)

    1
    New password:
  3. 重复确认密码

    1
    Retype new password:
第三步:初始化完成

输入完成后,系统会进入bash shell,显示类似:

1
[admin@host ~]$

AlmaLinux初始化完成!

3-3、常用命令

1
2
3
4
dnf list installed  // 列出所有已安装的包
rpm -qa --last | head -20 // 按安装时间排序
dnf list installed | grep <关键词> // 搜索特定软件
dnf list installed | wc -l // 统计已安装软件数量

三、WSL2基础操作

3-1、查看IP地址

方法一:使用 ip 命令
1
2
3
ip addr show eth0
简写
ip a

方法二:使用 hostname 命令(推荐)
1
hostname -I

方法三:使用 ifconfig 命令
1
ifconfig eth0

注意:此方法需要先安装 net-tools

1
sudo dnf install net-tools

卸载某个软件包:

1
2
3
4
5
# 卸载指定软件包,但保留配置文件和数据文件
sudo dnf remove net-tools

# 将配置文件一起删除,彻底清除,之后 `ifconfig` 命令就完全不能使用了
sudo dnf remove net-tools

关于 IP 地址说明
  • eth0: WSL2 虚拟网络接口,通常在 172.x.x.x
  • lo: 本地回环地址 127.0.0.1

示例输出:

1
2
$ hostname -I
172.24.240.100

这个 IP 地址可以用于从 Windows 访问 WSL2 中的服务


3-2、查看用户信息

查看用户信息

查看当前用户

1
whoami

查看所有用户

1
cat /etc/passwd

查看所有普通用户(UID >= 1000)

1
awk -F: '$3 >= 1000 {print $1}' /etc/passwd

查看当前登录用户的详细信息

1
2
3
id
# 或
finger $(whoami) # 需要安装 finger

密码管理

⚠️ 重要说明
无法直接查看密码,因为密码是加密存储的,在 /etc/shadow 文件中

查看密码状态

1
sudo passwd -S username

会显示状态:

  • P = 已设置密码
  • NP = 未设置密码
  • L = 账户被锁定

设置/修改密码

修改当前用户密码

1
passwd

修改其他用户密码(需要 root 权限)

1
sudo passwd username

从 Windows 重置 WSL 用户密码

如果忘记了密码,可以在 PowerShellCMD 中执行:

1
2
3
4
5
6
7
8
9
# 1. 以 root 为默认用户
wsl -u root

# 2. 在 WSL 中重置密码
passwd your_username

# 3. 退出并恢复默认用户(可选)
# 编辑 /etc/wsl.conf 来使用默认用户
exit

或者一条命令:

1
wsl -u root passwd your_username

查看 sudo 权限用户
1
2
3
4
5
# 查看 sudo 组成员
getent group sudo

# 或
grep '^sudo:' /etc/group

管理用户和权限
1
2
3
4
5
6
7
8
# 创建新用户
sudo adduser newuser

# 删除用户
sudo deluser username

# 将用户添加到 sudo 组
sudo usermod -aG sudo username

提示:WSL2 首次安装时需要你创建用户和密码,如果忘记需要重置用户账号。

3-3、设置自启动WSL

使用任务计划程序设置自启动

1️⃣ 确认 WSL 发行版名称

PowerShell终端输入

1
wsl -l -v

image-20260331005012166

2️⃣ 打开任务计划程序
  • Win + R
  • 输入 taskschd.msc
  • 点击”确定”
3️⃣ 创建基本任务
  • 在右侧”操作”面板,点击”创建基本任务”
  • 名称输入:自动启动WSL2
  • 描述(可选):开机自动启动AlmaLinux-9
  • 点击”下一步”

4️⃣ 设置触发器
  • 选择”当计算机启动时”
  • 点击”下一步”
5️⃣ 设置操作
  • 选择”启动程序”
  • 点击”下一步”
6️⃣ 配置程序
  • 程序或脚本:输入 wsl.exe
  • 添加参数:输入 -d AlmaLinux-9(使用创建基本任务描述中的名字AlmaLinux-9)
  • 点击”下一步”

1
2
# 通过命令查找wsl安装路径
where.exe wsl
7️⃣ 完成创建
  • 勾选”当单击’完成’时,打开此任务属性的对话框”
  • 点击”完成”

image-20260331012026057

8️⃣ 修改任务属性
  • 在弹出的属性窗口中:
    • 勾选”使用最高权限运行”
    • 勾选”不管用户是否登录都要运行”
    • 点击”确定”
  • 可能需要输入 Windows 密码确认

image-20260331012158928

9️⃣完成测试
1
2
# 如果看到 AlmaLinux 在运行列表中,说明配置成功。
wsl -l --running

image-20260331012318326



四、使用FinalShell连接WSL2

4-1、连接原理

WSL2 默认没有开启 SSH 服务,需要手动安装和配置。


4-2、安装和配置SSH服务

1️⃣ 在 WSL2 中安装 SSH 服务
1
2
3
4
5
# 更新软件包列表
sudo dnf update

# 安装 OpenSSH 服务器
sudo dnf install openssh-server -y

2️⃣ 配置 SSH 服务

自己用可用不配置 用默认的即可

配置项默认值说明
Port22默认 SSH 端口
PermitRootLoginprohibit-password允许 root 用密钥登录,禁止密码登录
PasswordAuthenticationyes默认允许密码认证
PubkeyAuthenticationyes默认启用密钥认证
1
2
# 编辑 SSH 配置文件
sudo nano /etc/ssh/sshd_config

修改以下配置项(使用 Ctrl+W 搜索):

1
2
3
Port 22                          # 确认端口
PermitRootLogin no # 禁止 root 登录(推荐)
PasswordAuthentication yes # 启用密码认证

保存
Ctrl + O(屏幕底部会提示 File Name to Write:)
然后按 Enter 确认保存。

退出
Ctrl + X


3️⃣ 启动 SSH 服务
1
2
3
4
5
# 启动 SSH 服务
sudo systemctl start sshd

# 检查 SSH 服务状态
sudo systemctl status sshd

如果看到以下输出,说明 SSH 服务已成功启动:

1
Active: active (running) since Sat 2026-01-17 19:50:01 CST; 4s ago

状态是 active (running),说明服务正在运行。

关键信息:

1
2
Server listening on 0.0.0.0 port 22.
Server listening on :: port 22.

SSH 服务正在监听 22 端口,可以接受连接了。


4️⃣ 设置 SSH 自动启动(可选)

每次启动 WSL2 时自动启动 SSH:

1
2
3
4
5
6
# 设置开机自启
sudo systemctl enable sshd

# 查看是否开启成功
systemctl is-enabled sshd
输出 enabled 表示成功,disabled 表示未启用。

5️⃣ 获取 WSL2 的 IP 地址
1
hostname -I

记录这个 IP,例如:172.24.240.100


6️⃣ 在 FinalShell 中创建连接
  1. 打开 FinalShell

  2. 新建连接 → 选择 SSH

  3. 填写信息:

    • 名称:WSL2-Ubuntu(自定义)
    • 主机172.x.x.x(你的 WSL2 IP)
    • 端口22
    • 认证方式:密码
    • 用户名:你的 WSL2 用户名
    • 密码:你的 WSL2 密码
  4. 保存并连接


4-3、常见问题排查

❌ 问题1:连接超时
1
2
3
4
5
# 检查 SSH 是否运行
sudo systemctl status sshd

# 如果没有运行,启动服务
sudo systemctl start sshd

❌ 问题2:端口被占用
1
2
3
4
5
6
7
# 检查 22 端口是否占用
sudo netstat -tlnp | grep :22

# 如果使用其他端口,如 2222
sudo nano /etc/ssh/sshd_config
# 修改 Port 为 2222
sudo service ssh restart

❌ 问题3:防火墙阻拦
1
2
3
4
5
# 查看防火墙状态
sudo ufw status

# 如果已启用,允许 SSH
sudo ufw allow 22/tcp

❌ 问题4:IP 地址变化

问题原因:

WSL2 使用虚拟网络适配器,每次重启 WSL2 或 Windows 时,WSL2 的 IP 地址可能会发生变化(例如从 172.17.114.127 变成 172.24.240.100)。这会导致 FinalShell 中保存的连接配置失效,需要频繁更新 IP 地址。

解决方案A:使用 localhost + 端口转发(推荐)

通过 Windows 的端口转发功能,将 Windows 的某个端口映射到 WSL2 的 SSH 端口,这样无论 WSL2 的 IP 如何变化,都可以通过 localhost 连接。

步骤:

  1. 获取当前 WSL2 的 IP 地址
1
2
# 在 WSL2 中执行
hostname -I
  1. 在 Windows PowerShell(管理员)中配置端口转发
1
2
3
# 将 Windows 的 2222 端口转发到 WSL2 的 22 端口
# 注意:需要替换 172.x.x.x 为实际的 WSL2 IP
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.x.x.x
  1. 在 FinalShell 中使用固定地址连接
    • 主机localhost127.0.0.1
    • 端口2222

**⚠️ 注意:**每次 WSL2 IP 变化后,需要重新执行端口转发命令。可以创建一个 PowerShell 脚本自动获取 IP 并配置转发。

解决方案B:使用 Windows Terminal(最简单)

Windows Terminal 是 Windows 10/11 自带的终端工具,可以直接启动 WSL2,无需 SSH 连接。

优点:

  • ✅ 无需配置 SSH
  • ✅ 无需担心 IP 变化
  • ✅ 启动速度快
  • ✅ 集成度高

使用方法:

  1. 打开 Windows Terminal
  2. 点击下拉箭头,选择 Ubuntu(或你的发行版)
  3. 直接使用,就像使用 SSH 客户端一样

解决方案C:配置静态 IP(高级)

可以配置 WSL2 使用固定 IP,但需要修改 Windows 和 WSL2 的网络配置,比较复杂,不推荐普通用户使用。


❌ 问题5:密码认证失败
1
2
3
4
5
6
7
8
# 确认密码认证已启用
grep "PasswordAuthentication" /etc/ssh/sshd_config

# 重置密码
passwd

# 重启 SSH 服务
sudo service ssh restart

4-4、快速测试连接

Windows CMDPowerShell 中测试:

1
ssh your_username@172.x.x.x

如果能够连接,说明 SSH 配置正确,FinalShell 也应该能连接。

SSH 连接格式说明:

1
2
ssh 用户名@IP地址
ssh 用户名@IP地址 -p 端口号

示例:

1
2
3
ssh zheng_hb@172.17.114.127
ssh zheng_hb@172.17.114.127 -p 22
ssh root@192.168.1.100 -p 2222


五、关于IP地址变化的详细说明

5-1、为什么WSL2的IP地址会变化?

WSL2 使用虚拟网络适配器(Virtual Network Adapter)来创建独立的网络环境。每次:

  • 重启 Windows
  • 重启 WSL2(wsl --shutdown 后重新启动)
  • Windows 网络适配器重置

WSL2 的虚拟网络可能会重新分配 IP 地址,导致 IP 地址发生变化。

示例:

  • 第一次启动:172.17.114.127
  • 重启后:172.24.240.100
  • 再次重启:172.18.56.89

5-2、IP地址变化的影响

影响场景:

  • ❌ FinalShell 中保存的连接配置失效
  • ❌ 需要频繁更新 IP 地址
  • ❌ 如果使用 IP 地址访问 WSL2 中的服务(如 Web 服务器),需要重新配置

不受影响:

  • ✅ Windows Terminal 直接启动 WSL2(不依赖 IP)
  • ✅ 在 Windows 中通过 localhost 访问 WSL2 服务(Windows 会自动处理)

5-3、推荐解决方案对比

方案优点缺点适用场景
Windows Terminal无需配置、稳定可靠、启动快界面相对简单日常开发使用(最推荐)
端口转发可以使用 FinalShell 等专业工具需要手动配置、IP变化后需重新配置需要 FinalShell 的高级功能
静态IPIP 固定不变配置复杂、容易出错特殊需求场景

5-4、自动端口转发脚本(可选)

如果你坚持使用 FinalShell,可以创建一个 PowerShell 脚本自动配置端口转发:

创建脚本 wsl-port-forward.ps1

1
2
3
4
5
6
7
8
9
10
# 获取 WSL2 IP 地址
$wslIp = (wsl hostname -I).Trim()

# 删除旧的端口转发规则
netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0

# 添加新的端口转发规则
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=$wslIp

Write-Host "端口转发已配置: localhost:2222 -> $wslIp:22"

使用方法:
每次启动 WSL2 后,以管理员身份运行此脚本即可。



六、总结

本指南涵盖了 WSL2 的安装、卸载、基础操作和远程连接配置,帮助你快速上手使用 WSL2 开发环境。

主要功能:

  • ✅ WSL2 安装与卸载
  • ✅ IP 地址查看
  • ✅ 用户管理
  • ✅ SSH 服务配置
  • ✅ FinalShell 远程连接

注意事项:

  • 安装和卸载操作需要管理员权限
  • 卸载发行版会删除所有数据,请提前备份
  • WSL2 的 IP 地址可能会变化
    • 推荐方案:直接使用 Windows Terminal,无需配置,稳定可靠
    • 备选方案:使用端口转发 + FinalShell,但需要处理 IP 变化问题