You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MobaXterm从远程设备SSH连接WSL2并支持X11 UI转发

解决远程设备通过MobaXterm SSH连接WSL2时X11转发失效的方案

你遇到的问题核心是:Scott Hanselman的方案是将Windows SSH服务的默认shell修改为WSL,这种模式下SSH的X11转发参数不会自动传递到WSL的shell环境中,因此DISPLAY变量不会自动配置,手动设置为localhost的话流量只会走到WSL本地对应的X服务,也就是宿主机的MobaXterm,所以界面会弹在宿主机上。

方案一:无需修改现有SSH配置,仅需新增环境变量(推荐)

1. 远程端MobaXterm配置

  • 打开远程设备上的MobaXterm,进入「设置」-「配置」-「X11」标签页,确认X11转发已启用,X服务器访问控制选择无限制(同私有网络下无安全风险),保存后重启MobaXterm生效。
  • 新建SSH会话:目标地址填WSL宿主机的Windows局域网IP,端口保持默认22,用户名填你的Windows系统账号名,切换到会话的「SSH」标签页,勾选「启用X11转发」,保存后连接该会话。

2. WSL内配置DISPLAY变量

连接成功进入WSL shell后,执行以下命令配置DISPLAY变量:

export DISPLAY=$(grep nameserver /etc/resolv.conf | awk '{print $2}'):$(echo $DISPLAY | cut -d: -f2)

该命令的逻辑是:先读取WSL内置resolv.conf里的Windows网关地址,再拼接上Windows SSH服务自动获取的远程X11显示编号,让WSL的X11流量先转发到Windows侧,再通过SSH隧道传回远程设备的MobaXterm,界面就会显示在远程设备上。
如果需要每次连接自动生效,将上述命令添加到WSL当前用户的~/.bashrc(对应Bash)或~/.zshrc(对应Zsh)文件末尾即可。

方案二:WSL内部署独立SSH服务(更稳定,适配复杂场景)

如果不想修改Windows系统的默认SSH shell,也可以直接在WSL内部署独立的SSH服务,解决WSL IP每次重启变动的问题只需新增一条开机自动执行的端口转发规则即可:

  1. 在WSL内安装配置openssh-server,设置服务开机自启,自定义SSH端口(例如2222,避免和Windows的22端口冲突)。
  2. Windows端以管理员权限打开PowerShell,执行以下命令配置端口转发:
# 自动获取WSL当前IP并配置端口转发,将2222端口的流量转发到WSL的2222端口
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=$(wsl -e hostname -I | cut -d' ' -f1) connectport=2222
  1. 将上述PowerShell命令添加到Windows的任务计划程序,触发条件设置为「系统启动时」、「用户登录时」执行,每次开机都会自动同步WSL的最新IP更新转发规则。
    配置完成后,远程设备直接通过宿主机IP的2222端口发起SSH连接,勾选X11转发即可,DISPLAY变量会自动配置,和普通Linux服务器的X11转发用法完全一致。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 06:48:04