三步搞定!让你的 WSL2 变身局域网内的 SSH 服务器_wsl openssh
 局域网内的其他电脑通过 SSH 连接到你 Windows 11 上的 WSL (Ubuntu),这个需求非常实用。这比默认的本机连接要复杂一些,因为涉及到**端口转发**和**防火墙设置**。
整个过程可以分为三个主要步骤:
- 在 WSL (Ubuntu) 中配置和运行 SSH 服务。
 - 在 Windows 中设置端口转发,将外部请求转发到 WSL。
 - 在 Windows 防火墙中添加入站规则,允许外部访问。
 
下面是详细的操作指南。
第1步:在 WSL (Ubuntu) 中配置和运行 SSH
这一步和之前我们讨论的类似,但要确保配置能接受外部连接。
- 
安装 OpenSSH Server
如果你的 WSL 中还没有安装 SSH 服务,先安装它。打开 WSL 终端:sudo apt updatesudo apt install openssh-server - 
配置 SSH 服务
编辑 SSH 配置文件,确保它允许密码登录并且监听在正确的端口。sudo nano /etc/ssh/sshd_config在编辑器中,找到并确认(或修改)以下几行:
# 确保监听在所有网络接口上,这是默认值,通常不用改# ListenAddress 0.0.0.0# 你可以自定义端口,也可以使用默认的 22 端口。这里以 22 为例。# 如果你想用其他端口,比如 2222,就写 Port 2222Port 22# 为了方便,先允许密码登录PasswordAuthentication yes# (可选)如果你不想每次都输入 sudo 启动服务,可以修改此项# UsePrivilegeSeparation no # 设为 no 可能降低安全性,但能避免一些权限问题按
Ctrl + X,然后按Y和Enter保存并退出。 - 
启动 SSH 服务
sudo service ssh start你可以检查一下状态,确保它正在运行:
sudo service ssh status如果看到
* sshd is running或Active: active (running)就表示成功了。 - 
获取 WSL 的 IP 地址
这个 IP 地址后面会用到。在 WSL 终端中运行:ip a | grep \"inet .* scope global\"你会看到类似
inet 172.21.123.45/20 ...这样的输出,记下这个 IP 地址(例如172.21.123.45)。 
第2步:在 Windows 中设置端口转发
这是最关键的一步。WSL2 运行在一个虚拟网络中,局域网内的其他电脑无法直接访问到 WSL 的 IP。我们需要在 Windows 主机上创建一个端口转发规则,将发往 Windows 主机某个端口的流量,转发给 WSL 的 SSH 端口。
- 
以管理员身份打开 PowerShell
- 在开始菜单上右键点击,选择 “终端 (管理员)” 或 “Windows PowerShell (管理员)”。
 
 - 
执行端口转发命令
我们将使用netsh命令来创建转发规则。命令的格式是:netsh interface portproxy add v4tov4 listenport= listenaddress= connectport= connectaddress=listenport: 你希望局域网其他电脑访问的 Windows 端口(例如2222)。listenaddress: 你的 Windows 主机在局域网中的 IP 地址。你可以在 PowerShell 中用ipconfig命令找到它(通常是192.168.x.x)。为了方便,也可以用0.0.0.0表示监听所有网络接口。connectport: 你在 WSL 中配置的 SSH 端口(例如22)。connectaddress: 你在第1步中获取到的 WSL 的 IP 地址(例如172.21.123.45)。
示例命令:
假设你的 Windows IP 是192.168.1.100,WSL IP 是172.21.123.45,你希望局域网其他电脑通过访问192.168.1.100的2222端口来连接 WSL 的22端口。netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=172.21.123.45执行后,如果没有任何错误信息,就表示规则添加成功。
 - 
查看已有的转发规则 (可选)
netsh interface portproxy show all 
重要提示:WSL2 的 IP 地址在重启后可能会改变。如果重启后发现无法连接,你需要重新获取 WSL 的 IP,并更新这条端口转发规则。可以先删除旧规则再添加新规则:
# 删除旧规则netsh interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0# 添加新规则 (用新的 WSL IP)netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=<新的WSL-IP>
(有自动化脚本可以解决这个问题,但我们先手动完成流程。)
第3步:在 Windows 防火墙中创建入站规则
现在,端口转发设置好了,但 Windows 防火墙默认会阻止外部设备访问 2222 端口。我们需要为它开一个“口子”。
- 
以管理员身份打开 PowerShell (如果已打开则不用重复)
 - 
执行防火墙规则命令
我们将使用New-NetFirewallRule命令。DisplayName: 规则的名字,方便你识别。Direction:Inbound(入站)。Action:Allow(允许)。Protocol:TCP。LocalPort: 你在端口转发中设置的 Windows 监听端口(例如2222)。
示例命令:
New-NetFirewallRule -DisplayName \"WSL2 SSH Access\" -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2222执行成功后,防火墙规则就添加好了。
 
大功告成!现在进行测试
现在,从局域网内的另一台电脑上,打开终端或 SSH客户端,执行连接命令:
- SSH 用户名: 你在 WSL (Ubuntu) 中的用户名。
 - IP 地址: 你的 Windows 主机在局域网的 IP 地址 (例如 
192.168.1.100)。 - 端口: 你在 Windows 上设置的监听端口 (例如 
2222)。 
连接命令示例:
ssh your_wsl_username@192.168.1.100 -p 2222
首次连接时,会提示你确认服务器的指纹,输入 yes。然后输入你在 WSL 中的用户密码,即可成功登录!
总结流程
- WSL 端:装好 
openssh-server,改好配置,启动服务,记下 IP。 - Windows 端 (管理员 PowerShell):用 
netsh命令创建端口转发,将WindowsIP:外部端口转发到WSL-IP:SSH端口。 - Windows 端 (管理员 PowerShell):用 
New-NetFirewallRule命令在防火墙上为外部端口创建一个 TCP 入站允许规则。 - 其他电脑:使用 
ssh @ -p进行连接。 


