Win10 Hyper-V中Ubuntu虚拟机SSH连接WSL Ubuntu超时问题求助
解决Hyper-V Ubuntu虚拟机SSH连接WSL Ubuntu超时的问题
我来帮你搞定这个连接超时的问题——既然你已经能从Win10主机双向SSH连接(主机→WSL、主机→Hyper-V虚拟机),说明SSH服务本身是正常的,问题肯定出在网络连通性或者配置隔离上,咱们一步步排查:
1. 先检查Hyper-V虚拟机的网络模式
Hyper-V默认的Default Switch是NAT模式,虚拟机和主机处于一个隔离的NAT子网,而WSL(尤其是WSL2)有自己的虚拟网络栈,两者可能不在同一个可达网段里。
解决方案:改用桥接模式虚拟交换机
- 打开Hyper-V管理器,点击左侧的「虚拟交换机管理器」
- 选择「新建虚拟交换机」,类型选「外部」,点击「创建虚拟交换机」
- 命名(比如
Bridge-Switch),选择你主机正在使用的物理网卡(比如以太网/Wi-Fi),取消勾选「允许管理操作系统共享此网络适配器」(可选,避免冲突) - 右键你的Ubuntu虚拟机→「设置」→「网络适配器」,选择刚才创建的桥接交换机,重启虚拟机
这样虚拟机就会和主机、WSL处于同一个物理网段,网络连通性更直接。
2. 确认WSL的SSH服务监听配置
有时候WSL的sshd默认只监听本地回环地址(127.0.0.1),导致外部设备(包括Hyper-V虚拟机)无法连接:
- 进入WSL终端,执行命令查看监听状态:
ss -tulpn | grep sshd - 如果输出里只有
127.0.0.1:22,说明只允许本地连接,需要修改配置:sudo nano /etc/ssh/sshd_config - 找到
ListenAddress行(如果没有就新增),改成:ListenAddress 0.0.0.0 - 重启SSH服务:
sudo service ssh restart
3. 检查Win10防火墙的入站规则
Win10主机能连WSL,是因为本地流量默认放行,但Hyper-V虚拟机的流量属于外部局域网流量,可能被防火墙拦截:
- 打开「控制面板→Windows Defender防火墙→高级设置」
- 点击「入站规则→新建规则」
- 规则类型选「端口」,下一步;选择「TCP」,填入
22(如果你的WSL SSH用了自定义端口就填对应端口),下一步 - 选择「允许连接」,下一步;勾选「域、专用、公网」(测试阶段全选,之后可以根据需求调整)
- 命名规则(比如「允许Hyper-V访问WSL SSH」),完成
4. 针对WSL2的特殊处理(如果你的WSL是版本2)
WSL2有独立的虚拟网卡,IP地址会随主机重启动态变化,即使桥接了虚拟机,也可能因为IP变动导致连接失败:
- 先在WSL里获取当前IP:
hostname -I - 在Hyper-V虚拟机里先ping这个IP,确认能通;如果ping不通,回到步骤1检查桥接配置
- 如果想避免IP变动的问题,可以在Win10里设置端口转发,把主机的某个端口映射到WSL的22端口:
# 以管理员身份打开PowerShell,执行以下命令(替换<WSL_IP>为实际IP) netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=<WSL_IP> connectport=22 - 之后Hyper-V虚拟机就可以通过
ssh <Win10主机IP> -p 2222连接WSL
验证步骤
在Hyper-V虚拟机里先做基础连通性测试:
- ping WSL的IP(或主机IP,如果用了端口转发),看是否能通
- 用telnet测试端口:
telnet <目标IP> 22(或2222),如果能看到SSH服务的欢迎信息,说明端口是开放的 - 再尝试SSH连接,应该就能成功了
内容的提问来源于stack exchange,提问作者The Bahree




