[wsl2]MacOS/Win局域网ssh毗连wsl2:Ubuntu24.04 LTS

打印 上一主题 下一主题

主题 1970|帖子 1970|积分 5910

保证使用的是微软应用市肆中下载的Ubuntu发行版本,本文在配置时发现若使用docker所基于的ubuntu体系配置会失败。遂接纳默认的子发行版本。

   可以通过微软市肆下载。也可以在更新wsl2至最新版后,使用命令安装
  1. wsl -l -o
  2. # 安装Ubuntu-24.04(推荐长期支持版本)
  3. wsl --install Ubuntu-24.04
  4. # 设置默认WSL版本为2(若未设置)
  5. wsl --set-default-version 2
  6. # 查看已安装的发行版
  7. wsl -l -v
  8. # 将Ubuntu设为默认
  9. wslconfig /setdefault Ubuntu-24.04
复制代码
或请参考其他教程安装,本文默认你的子体系安装没有题目!

写在前面

why wsl2?

因为题主在跑python时,i9-13900K只调用了20%,使用wsl后可以使cpu跑满80%+。加快炼丹!
然而实验室电脑上另有同砚需要使用matlab等其他工具,显然是不能卸载Windows的。
遂退而且其次使用WSL2.
win11的利益

假如你是win11,那么恭喜你,请你根据关键词:镜像网络mirrored wsl2搜索相干教程去实现局域网ssh毗连。
如: https://blog.csdn.net/jyzjut/article/details/140079778
怎样查看本身的windows体系版本:
  1. # win + r 输入: winver
复制代码

假如你和题主一样,不风俗用win11,仍旧是win10(190xx.xxxx版本)的钉子户(好吧,现在题主已经卸载win拥抱macOS了,这是实验室的电脑),那么根据一些教程配置.wslconfig为mirrored后
肯定会报错!因为mirrored模式This is unfortunately by design. Mirrored networking is only supported on Windows 11!(Github找到的Issue)
开始配置之前

   为了方便区分:装载ubuntu子体系的Windows称做宿主机,子体系称做wsl或wsl2子体系。
  1. 确保宿主机和wsl2子体系能够ping通

WSL2默认的网络模式为NAT,什么是NAT?
   核心作用:NAT 允许内部私有网络中的设备通过一个公共IP地点访问外部网络(如互联网)。
类比:想象你住在一栋公寓楼里,所有住户共用同一个对外地点(公网 IP),但每户有本身的房间号(私有 IP)。快递员只需将包裹送到公寓地点,再由管理员分发给具体房间。这就是 NAT 的工作方式。
  怎样检查 WSL2 的 IP 地点?

   参考:https://www.cnblogs.com/SocialistYouth/p/16691035.html
上面的文章写的很好,猛烈发起看完后继续阅读本文。
  WSL2中运行:
  1. ip addr show eth0  # 查看私有 IP(如 172.x.x.x)
复制代码

Win终端中:
  1. wsl hostname -I  # 获取 WSL2 的 IP
复制代码

OK,此时我们发现因为只有一个wsl2体系,以是是同一个ip地点。
那么这个类似的“公网IP”在那里呢?
win终端运行ipconfig

WSL 172.25.224.1 就是给wsl体系分配的“公网ip”
   wsl2 则可以理解为宿主机完整假造出来的一个完整的 Linux 假造机,拥有本身的逻辑上独立的网卡,也即拥有属于本身的独立网络栈。与 VMware 的 bridge 模式和 docker 的 macvlan 模式类似。
  

此时,按照正常思路,我们应该确保wsl2子体系172.25.233.221与宿主机10.193.225.128相互之间能够ping通,假如ping差别,请参考 https://www.cnblogs.com/SocialistYouth/p/16691035.html
  1. 例如我的:
  2. #宿主机终端:
  3. ping 172.25.233.221
  4. #wsl2执行
  5. ping 10.193.225.128
复制代码
保证他们都能ping通再继续!
2. 确保第三方主机与宿主机ping通

   参考:https://www.crifan.org/windows_10_wifi_lan_cannot_be_pinged_by_mac/
  题主是用本身的macOS去毗连宿主机win下的wsl2,以是,这一步也十分关键。
保证你的设备和宿主机都在一个局域网下!
  1. #验证
  2. #macOS执行:
  3. ping <宿主机ip>
  4. #宿主机执行
  5. ping <macOS ip>
复制代码
这时候,我们发现一般都ping不通。为什么?防火墙!
此时,无脑关闭所有防火墙,实验ping,一般都能ping通了。ping不通请检查是否手动设置过ip地点,假如不会设置的话,请规复为dhcp方式获取ip地点,此外请检查以及物理毗连是否通畅。

测试乐成后,假如您不放心你的宿主机裸奔,请参考https://blog.csdn.net/hitzzq508/article/details/120576464举行防火墙设置。
开始配置


  • wsl2安装openssh
  1. apt update
  2. apt install openssh-server
复制代码
可选,即登录时,宿主机可使用:ssh root@<wsl-ip> 毗连
  1. #在wsl2中开启root用户远程访问
  2. username@localhost:/$ sudo passwd root
  3. New password:
  4. Retype new password:
复制代码

  • 配置openssh
  1. sudo nano /etc/ssh/sshd_config
复制代码
  1. # 端口默认是22,可以改为指定的端口,此处改成3456
  2. Port 3456
  3. ListenAddress 0.0.0.0
  4. HostKey /etc/ssh/ssh_host_rsa_key
  5. HostKey /etc/ssh/ssh_host_ecdsa_key
  6. HostKey /etc/ssh/ssh_host_ed25519_key
  7. PasswordAuthentication yes
  8. #取消注释并修改为yes
  9. PermitRootLogin yes
复制代码
  注意:此处的端口是宿主机(即安装wsl2的机器)毗连wsl2的端口,与外界机器毗连宿主机的接口差别。(固然,你也可以设置成同一个,为显区分,本文将设置为差别的端标语)
接下来,你会发现ubuntu22.04以上版本的体系不生效,端口照旧22.具体关键词可以搜索ubuntu24.04 修改默认ssh端口失败
  1. # 重启ssh服务
  2. sudo service ssh restart #不生效~
  3. # ubuntu 22.04及以上
  4. sudo systemctl daemon-reload
  5. sudo systemctl restart ssh.socket  #这个是关键!
  6. # 查看端口
  7. sudo service ssh status
复制代码


  • 配置防火墙
  1. # 宿主机终端或powershell中执行:
  2. New-NetFirewallRule -DisplayName "WSL" -Direction Inbound  -InterfaceAlias "vEthernet (WSL)"  -Action Allow
复制代码

  • 接下来,在宿主机win中测试ssh毗连wsl2
    打开宿主机的终端或powershell:
    1. # 这里的3456就是上面设置的端口,可以设置为其他你习惯的端口号
    2. ssh <id>@localhost -p 3456
    3. # 例如我就是: ssh ronchy22@localhost -p 3456
    复制代码
    假如能够宿主机能够毗连乐成,可以实验以下的配置方式,将外部毗连的端口(如1758)映射到WSL2的SSH端口(3456)
    1. # listenport=<port1> 是指其他机器连接到本机所用的端口,本文章中设置为1758
    2. # connectport=<port2> 是指本机连接到本机wsl2所用的端口,本文章中设置为3456
    3. # 格式如下:
    4. # netsh interface portproxy set v4tov4 listenport=<port1> connectport=<port2> connectaddress=127.0.0.1
    5. netsh interface portproxy set v4tov4 listenport=1758 connectport=3456 connectaddress=127.0.0.1
    6. # 查看端口转发列表,检查刚刚有无设置成功
    7. netsh interface portproxy show all
    8. # 查看windows正在监听的端口,应该能看到所设定的端口1758正在被LISTENING
    9. netstat -ano -p tcp
    复制代码

    • listenaddress=0.0.0.0允许所有IP访问,若需限定可改为宿主机局域网IP
    • 若WSL重启导致IP变化,需动态获取IP(见步调5解决方案)

  • 在第三方如macOS测试ssh毗连宿主机
    macOS终端中输入下列命令,并按照提示输入密码。
    1. # macOS terminal
    2. ssh <wsl2-usrname>@<宿主机ip> -p 1758
    3. # 例如我的:ssh ronchy22@10.193.225.128  -p 1758
    复制代码
    此时假如macOS终端报错:kex_exchange_identification: read: Connection reset,
    那么,请在宿主机合适的地方,如C\User\username,大概桌面新建文本文档,并将后缀修改为.ps1,并以管理员权限运行,再次实验毗连,即可!
    1. $wsl_ip = (wsl hostname -I).Trim()
    2. netsh interface portproxy delete v4tov4 listenport=1758
    3. netsh interface portproxy add v4tov4 listenport=1758 connectport=3456 connectaddress=$wsl_ip
    复制代码

    • 此脚本动态获取WSL最新IP并更新转发规则
    • 权限题目:确保Windows防火墙允许1758端口入站 (即上面的防火墙设置)
    1. New-NetFirewallRule -DisplayName "WSL2_SSH" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1758
    复制代码

端口映射逻辑详解:
很多教程都是22对22端口,以是很容易把监听端口搞混淆.


  • 为何避免22对22端口? 冲突风险:Windows大概已占用22端口(如OpenSSH服务),导致转发失败
  • 清晰区分:

    • WSL内部端口:SSH服务现实监听的端口(如3456),需在sshd_config中设置。
    • 宿主机监听端口:外部设备毗连的端口(如1758),通过netsh映射到WSL的3456

  • 映射关系示意图
    1. 外部设备(Mac) --> 宿主机IP:1758 --> WSL IP:3456
    复制代码
通过以上步调,可实现稳定的跨设备SSH访问WSL2服务!。若需长期使用,发起结合开机自启脚本和动态IP处置处罚,避免手动维护!
增补:一键化脚本与开机自启


  • 创建PowerShell脚本 生存为auto_forward.ps1(管理员运行)
  1. Powershell# 获取WSL动态IP$wsl_ip = (wsl hostname -I).Trim()# 删除旧规则,防止冲突netsh interface portproxy reset# 添加SSH端口转发netsh interface portproxy add v4tov4 listenport=1758 listenaddress=0.0.0.0 connectport=3456 connectaddress=$wsl_ip# 开放防火墙if (-not (Get-NetFirewallRule -DisplayName "WSL2_SSH" -ErrorAction SilentlyContinue)) {    New-NetFirewallRule -DisplayName "WSL2_SSH" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 1758
  2. }
复制代码

  • 设置开机自启
    将脚本放入启动文件夹(Shell:Startup),或通过使命计划步伐添加开机使命.

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

河曲智叟

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表