You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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虚拟机里先做基础连通性测试:

  1. ping WSL的IP(或主机IP,如果用了端口转发),看是否能通
  2. 用telnet测试端口:telnet <目标IP> 22(或2222),如果能看到SSH服务的欢迎信息,说明端口是开放的
  3. 再尝试SSH连接,应该就能成功了

内容的提问来源于stack exchange,提问作者The Bahree

火山引擎 最新活动