win11 安装 WSL2 Ubuntu 并支持远程 SSH 登录

目录

文章目录

  • 目录
  • 环境信息
  • WSL
  • [启用 Win11 WSL 和虚拟机平台功能](#启用 Win11 WSL 和虚拟机平台功能)
  • [在 Win11 上使用 WSL安装 Ubuntu](#在 Win11 上使用 WSL安装 Ubuntu)
  • [修改 WSL 的网络模式支持局域网访问](#修改 WSL 的网络模式支持局域网访问)
  • [配置 Ubuntu SSH](#配置 Ubuntu SSH)
  • [配置 Win11 防火墙放行 ssh 流量](#配置 Win11 防火墙放行 ssh 流量)

环境信息

  • Win11
  • WSL2
  • Ubuntu 22.04 LTS

WSL

WSL 是一个与 Microsoft Windows 操作系统紧密集成的容器化环境,使得用户可以以非常轻量级的方式在 Windows 操作系统上运行 Linux 操作系统,而不再需要双系统或 VMware/Hyper-V 虚拟机。

启用 Win11 WSL 和虚拟机平台功能

  1. 管理员身份打开 PowerShell。
  2. (按需,Win11 默认已安装)安装 WSL:https://learn.microsoft.com/en-us/windows/wsl/install
  3. 启用 WSL 功能。
bash 复制代码
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
  1. 启用虚拟机平台功能。
bash 复制代码
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  1. 重启电脑。

在 Win11 上使用 WSL安装 Ubuntu

  1. 打开 Microsoft Store 搜索 Ubuntu。

  2. 选择最新的 Ubuntu LTS 版本点击安装。

  3. 安装完成后,从开始菜单启动 Ubuntu。可能的,会自动提示并需要下载和更新 WSL版本。然后会自动进行完成 Ubuntu 初始化设置,输出 Username 和 Password。

  4. 从开始菜单启动 WSLsetting,打开设置页面可以修改虚拟机的 CPU、内存、网络、磁盘等配置。

  5. 管理员身份打开 PowerShell。

  6. Ubuntu 启动后,查看 WSL运行实例信息。

bash 复制代码
PS C:\WINDOWS\system32> wsl -l -v
  NAME            STATE           VERSION
* Ubuntu-22.04    Running         2

修改 WSL 的网络模式支持局域网访问

默认情况下,WSL 的网络模式是 NAT。此时 Ubuntu 操作系统 IP 地址默认为 172 段。通过 WLS NAT 网络模式访问互联网。

bash 复制代码
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:70:5d:e8 brd ff:ff:ff:ff:ff:ff
    inet 172.30.36.188/20 brd 172.30.47.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::215:5dff:fe70:5de8/64 scope link
       valid_lft forever preferred_lft forever

但在局域网 SSH 的场景中,WSL 提供了更方便的 Mirrored 模式。

此时 Ubuntu 的 IP 地址和 Host IP 一样。既支持访问公网,也只是局域网访问。

bash 复制代码
$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet 10.255.255.254/32 brd 10.255.255.254 scope global lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 74:5d:22:c7:ab:04 brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:50:56:c0:00:01 brd ff:ff:ff:ff:ff:ff
4: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN group default qlen 1000
    link/ether 00:50:56:c0:00:08 brd ff:ff:ff:ff:ff:ff
5: loopback0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:15:5d:2f:cc:52 brd ff:ff:ff:ff:ff:ff
6: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 14:ac:60:b4:cb:73 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.7/24 brd 192.168.1.255 scope global noprefixroute eth3
       valid_lft forever preferred_lft forever
    inet6 2408:8207:1862:7f50:7fcc:d06d:e1e8:45e1/64 scope global nodad deprecated noprefixroute
       valid_lft forever preferred_lft 0sec
    inet6 2408:8207:1862:7f50:c53e:b25c:8176:ffd0/128 scope global nodad noprefixroute
       valid_lft forever preferred_lft forever
    inet6 fe80::7af4:f1eb:99e9:a7f/64 scope link nodad noprefixroute
       valid_lft forever preferred_lft forever

配置 Ubuntu SSH

  1. 卸载初始 ssh
bash 复制代码
sudo apt remove openssh-server
  1. 更新操作系统
bash 复制代码
sudo apt update
  1. 重装 ssh
bash 复制代码
sudo apt install openssh-server
  1. 修改 ssh 配置
bash 复制代码
sudo vim /etc/ssh/sshd_config

...
# ssh 服务监听端口
Port 2223
# ssh 服务允许远程 root 用户登入
PermitRootLogin yes
# ssh 服务允许使用用户名密码方式登入
PasswordAuthentication yes
  1. 重启 ssh
bash 复制代码
sudo service ssh restart
  1. 查看 ssh 状态
bash 复制代码
sudo service ssh status
  1. 常驻 ssh
bash 复制代码
sudo systemctl ssh enable

配置 Win11 防火墙放行 ssh 流量

  1. 管理员身份打开 PowerShell。
  2. (NAT 模式网络下需要配置,Mirrored 模式不需要配置)添加端口代理,配置 Port DNAT,使得 Remote 可以 ssh 到 localhost:port。
bash 复制代码
PS C:\WINDOWS\system32> netsh interface portproxy add v4tov4 listenport=2223 listenaddress=0.0.0.0 connectport=2223 connectaddress=<WSL2_IP_Address> # ubuntu ip
PS C:\WINDOWS\system32> netsh interface portproxy show v4tov4

Listen on ipv4:             Connect to ipv4:

Address         Port        Address         Port
--------------- ----------  --------------- ----------
0.0.0.0         2223        localhost       2223
# netsh interface portproxy delete v4tov4 listenport=2223 listenaddress=0.0.0.0
  1. 设置防火墙入向规则
bash 复制代码
PS C:\WINDOWS\system32> netsh advfirewall firewall add rule name=WSL2 dir=in action=allow protocol=TCP localport=2223
PS C:\WINDOWS\system32> netsh advfirewall firewall show rule WSL2

Rule Name:                            WSL2
----------------------------------------------------------------------
Enabled:                              Yes
Direction:                            In
Profiles:                             Domain,Private,Public
Grouping:
LocalIP:                              Any
RemoteIP:                             Any
Protocol:                             TCP
LocalPort:                            2223
RemotePort:                           Any
Edge traversal:                       No
Action:                               Allow
Ok.
# netsh advfirewall firewall delete rule WSL2
  1. 测试流量
bash 复制代码
remote $ ssh username@win11_ip -p 2223
相关推荐
wdfk_prog41 分钟前
[Linux]学习笔记系列 -- [drivers][input]input
linux·笔记·学习
盟接之桥1 小时前
盟接之桥说制造:引流品 × 利润品,全球电商平台高效产品组合策略(供讨论)
大数据·linux·服务器·网络·人工智能·制造
忆~遂愿2 小时前
ops-cv 算子库深度解析:面向视觉任务的硬件优化与数据布局(NCHW/NHWC)策略
java·大数据·linux·人工智能
湘-枫叶情缘2 小时前
1990:种下那棵不落叶的树-第6集 圆明园的对话
linux·系统架构
Fcy6482 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满3 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠3 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
Gary Studio3 小时前
rk芯片驱动编写
linux·学习
mango_mangojuice3 小时前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
Harvey9033 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s