type
Post
status
Published
date
May 1, 2026
slug
remote-mac-to-wsl2
summary
在多机办公场景中,一个常见痛点是:主力机是 Mac,但高性能的开发环境(例如深度学习、大规模编译)运行在 Windows 台式机的 WSL 2 之中。
tags
工具
category
技术分享
icon
password
URL
0. 引言
在多机办公场景中,一个常见痛点是:主力机是 Mac,但高性能的开发环境(例如深度学习、大规模编译)运行在 Windows 台式机的 WSL 2 之中。
你可能已经学会使用 VS Code 的 Remote-SSH 连接 Windows 宿主机,但当你发现代码实际位于 WSL 内部时,又会遇到 文件访问缓慢、编译器路径不匹配 等问题。本文将拆解如何“穿透” Windows,让 Mac 上的 VS Code 直接“落地”到 WSL 2 内部。
1. 为什么这比想象中复杂?
WSL 2 使用基于 Hyper-V 的 NAT 网络架构。这意味着:
- Windows 宿主机拥有局域网 IP(如
192.168.1.100)。
- WSL 2 拥有一个只有 Windows 自己能看到的私有虚拟 IP(如
172.18.x.x)。
- Mac 默认无法访问这个虚拟 IP。
要打破这道墙,业界主要有两种成熟方案:端口转发 (Port Forwarding) 和 SSH 跳板 (Proxy Jump)。
2. 核心配置:WSL 端的“接应”
首先,WSL 内部需要运行一个可供连接的服务。
- 安装并配置 SSH Server:在 WSL 终端中执行:
sudo apt update && sudo apt install openssh-server- 修改端口(关键):Windows 宿主机可能已占用 22 端口,建议为 WSL 指定一个特殊端口(如
2222)。编辑sudo nano /etc/ssh/sshd_config: Port 2222PasswordAuthentication yes(或配置 SSH Key)ListenAddress 0.0.0.0
- 启动服务:
sudo service ssh start3. 方案 A:端口转发(最常用、最稳定)
这种方法的思路是告诉 Windows:“如果有来自局域网对 2222 端口的请求,请将它转发到 WSL。”
第一步:Windows 宿主机打通隧道
在 Windows 上以管理员身份打开 PowerShell,执行以下脚本:
# 获取 WSL 的内部 IP
$wsl_ip = (wsl hostname -I).Trim()
# 设置端口转发:监听宿主机的 2222,转发到 WSL 的 2222
netsh interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=2222 connectaddress=$wsl_ip
# 放行防火墙
New-NetFirewallRule -DisplayName "WSL SSH" -Direction Inbound -LocalPort 2222 -Protocol TCP -Action Allow第二步:Mac 端 VS Code 连接
- 安装 Remote - SSH 插件。
- 在 Mac 的
~/.ssh/config中添加:
Host win-wsl
HostName [Windows的局域网IP]
User [WSL里的用户名]
Port 2222- 连接
win-wsl,搞定。
4. 方案 B:SSH Proxy Jump(“跳板机”模式)
如果你的 Windows 已经开启了 OpenSSH Server(Windows 版),可以利用 SSH 的 跳板功能,直接从 Windows 宿主机“跳”进 WSL,而无需配置复杂的端口转发规则。
Mac 的 SSH Config 配置如下:
# 第一跳:进入 Windows 宿主机
Host win-host
HostName 192.168.1.100
User win-user
# 第二跳:从 Windows 内部跳入 WSL
Host wsl-dev
HostName localhost
User wsl-user
Port 2222
ProxyJump win-host优点: 不需要每次更新 WSL IP,因为对 Windows 来说,WSL 始终在
localhost 附近。5. 进阶:如何让连接“无感”?
- 免密登录: 将 Mac 的公钥 (
~/.ssh/id_rsa.pub) 分别加入 Windows 和 WSL 的authorized_keys中。
- WSL 自动启动 SSH: 在 WSL 的
~/.bashrc末尾添加sudo service ssh start。
- 处理 IP 变动: WSL 的虚拟 IP 每次重启都会变化。推荐在 Windows 计划任务中运行一个简单的 PowerShell 脚本,在启动时自动更新
netsh portproxy。
6. 总结
让 Mac 上的 VS Code 连接 WSL 2 的本质是 “把 WSL 当作远程服务器对待”。
- 如果你追求极致性能和更原生的体验,建议使用上述 SSH 方案,而不是简单的 Samba 共享文件或磁盘映射。
- VS Code Remote Development 插件会在连接成功后自动在 WSL 内部安装
vscode-server,让你在 Mac 上也能享受完整 Linux 环境的智能补全与调试能力。
参考资源:
- 作者:airouter.me
- 链接:https://airouter.me/article/remote-mac-to-wsl2
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
.webp?table=block&id=29d6498c-e5c2-81db-8e4b-e244bef7a08e&t=29d6498c-e5c2-81db-8e4b-e244bef7a08e)
.webp?table=block&id=29d6498c-e5c2-81c0-a99d-c7634656aeb1&t=29d6498c-e5c2-81c0-a99d-c7634656aeb1)
.webp?table=block&id=29d6498c-e5c2-8142-95cf-f25aa5bf7c3c&t=29d6498c-e5c2-8142-95cf-f25aa5bf7c3c)
.webp?table=block&id=29d6498c-e5c2-81a6-9769-d0a36aa56ae1&t=29d6498c-e5c2-81a6-9769-d0a36aa56ae1)
.webp?table=block&id=29d6498c-e5c2-81b9-9097-ca18dffbaf26&t=29d6498c-e5c2-81b9-9097-ca18dffbaf26)
.webp?table=block&id=29d6498c-e5c2-8179-a7cc-f3e9ba78174b&t=29d6498c-e5c2-8179-a7cc-f3e9ba78174b)

.webp?table=block&id=2a46498c-e5c2-804e-9c62-daf6c095ef2e&t=2a46498c-e5c2-804e-9c62-daf6c095ef2e)