查看: 91|回复: 1

WSL2中配置SSH服务并实现局域网外部访问的完整指南

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在Windows Subsystem for Linux 2(WSL2)环境中,许多开发者会遇到一个典型需求:希望局域网内的其他机器能够直接访问WSL2实例中运行的SSH服务。由于WSL2采用虚拟网络适配器并拥有独立的私有IP,默认情况下外部机器无法直接接入。本文基于实际配置经验,详细介绍从零开始启用WSL2 SSH服务、打通Windows防火墙与端口转发、并为WSL2分配静态IP的全过程。

第一步:在WSL2中安装与配置OpenSSH服务

首先进入你的WSL2发行版(以Ubuntu为例),更新软件包索引并安装SSH服务器:
  1. sudo apt update
  2. sudo apt install openssh-server -y
复制代码

安装完成后,修改SSH的配置文件 /etc/ssh/sshd_config。使用nano或其他编辑器打开:
  1. sudo nano /etc/ssh/sshd_config
复制代码

在文件中找到以下两行并取消注释(删除行首的#):
- Port 22(确保SSH监听在默认端口22)
- PasswordAuthentication yes(允许密码登录,也可根据安全需求改用密钥认证)

保存并退出编辑器。接着启动SSH服务,并设置开机自启:
  1. sudo service ssh start
  2. sudo systemctl enable ssh
复制代码

注意:WSL2中systemctl可能不完全生效,若提示无法启用,可使用其他方式如编辑 /etc/rc.local 或通过Windows任务计划启动。不过 service ssh start 可确保当前会话中服务运行。

第二步:配置Windows防火墙与端口转发

WSL2实例的IP地址对局域网其他设备不可见,需要在Windows层面做两层处理:允许入站连接,并将流量转发到WSL2的虚拟网卡。

以管理员身份打开Windows PowerShell,执行以下命令添加防火墙规则,开放22端口:
  1. New-NetFirewallRule -DisplayName "WSL2 SSH" -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
复制代码

然后设置端口转发规则,将主机22端口收到的TCP流量转发到WSL2的内部IP(需先获取WSL2当前IP)。在WSL2终端中执行 ip addr show eth0 查看IP,通常为 172.x.x.x 或 192.168.x.x。记下该地址后,在PowerShell中运行:
  1. netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=<WSL2_IP_Address>
复制代码

将 <WSL2_IP_Address> 替换为实际IP(例如 172.20.10.5)。验证转发是否生效:
  1. netsh interface portproxy show v4tov4
复制代码

此时,局域网内其他机器已可通过Windows主机的IP地址及端口22访问WSL2的SSH。

第三步:为WSL2配置静态IP以防止重启后变动

每次重启Windows或WSL2实例,WSL2的IP地址可能发生变化,导致端口转发失效。解决方案是为WSL2分配固定IP。

首先在WSL2中编辑 /etc/wsl.conf,若文件不存在则创建:
  1. sudo nano /etc/wsl.conf
复制代码

添加以下内容,禁用resolv.conf自动生成(便于后续手动设置DNS):
  1. [network]
  2. generateResolvConf = false
复制代码

保存后,使用netplan配置静态IP。创建 /etc/netplan/00-wsl.yaml:
  1. sudo nano /etc/netplan/00-wsl.yaml
复制代码

填入以下配置,将 <desired_ip_address> 替换为你期望的IP(例如 192.168.50.2,需与现有局域网不冲突):
  1. network:
  2.   version: 2
  3.   ethernets:
  4.     eth0:
  5.       dhcp4: false
  6.       addresses: [192.168.50.2/24]
  7.       nameservers:
  8.         addresses: [8.8.8.8]
复制代码

应用配置:
  1. sudo netplan apply
复制代码

然后关闭所有WSL实例并重启:
  1. wsl.exe --shutdown
复制代码

重新打开WSL2发行版,使用 ip addr 确认静态IP已生效。最后更新Windows上的端口转发规则,将IP替换为刚设置的静态IP:
  1. netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=192.168.50.2
复制代码

注意:需先删除旧规则(netsh interface portproxy delete v4tov4 listenport=22),再添加新规则,避免冲突。

总结
通过以上三步,即可实现WSL2 SSH服务对局域网的稳定开放。核心要点包括:在WSL2内安装配置OpenSSH、Windows防火墙放行与端口转发、为WSL2指定静态IP。此方案适用于需要远程登录WSL2开发环境、或将其作为临时服务器的场景。若遇到连接失败,请确认防火墙未拦截、转发规则内IP正确、WSL2的SSH服务正在运行。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: WSL2中配置SSH服务并实现局域网外部访问的完整指南

感谢楼主分享这么详细的指南!之前一直被WSL2虚拟网卡的IP变动问题困扰,每次重启都得重新查IP改端口转发,确实很麻烦。第三步配置静态IP的netplan方法我以前没试过,感觉比网上用脚本临时重设的要稳定得多。另外,关于Windows防火墙规则,如果用的是Windows自带的高级安全防火墙,其实也可以直接在图形界面中添加入站规则,不过用PowerShell命令更高效。有个小问题想请教:netplan配置静态IP后,WSL2的DNS如果手动指定为8.8.8.8,会不会影响主机自带的DNS解析或公司内网域名?谢谢!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-5 15:26 , Processed in 0.025151 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部