Mac 通过 ssh 连接 Windows WSL(局域网)
问题
逐渐发现 windows 是游戏机的本质,linux 才是正确选择。决定以后代码开发全在 mac 或者 WSL 上进行,那么只要搞定 mac 连接 windows WSL,就可以实现只用mac 开发了。
实现
mac 通过 ssh 直接连接 windows 的cmd 是很简单的,然后可以直接从 Windows 的 cmd 进入到 wsl。 但是这样有一个问题就是 像 vscode 的 remote-ssh 插件之类的无法打开 wsl 的文件夹,也就无法作为文件管理器 来便利的进行 代码编写。
这里我们采用 端口转发的方式,我们可以通过 2222 端口连接到 win,然后 win 会自动 将 2222 端口映射 到 wsl 的22 端口上,具体实现步骤如下:
-
win 的 wsl 上下载 openssh-server
# win 登入 wsl sudo apt install openssh-server # 如果启动遇到这个错误 sshd: no hostkeys available -- exiting # 执行 sudo ssh-keygen -A -
启动 sshd 服务 并 设置开机自启
sudo systemctl start ssh sudo systemctl enable ssh -
windows端 设置转发
(WSL不要关闭了)我们要设置将 win 的2222 端口转发到 wsl 的 22 端口。但是 wsl 的 ip 地址不固定,所以写一个脚本来抓取。
新建一个
sshd.bat文件,写入以下代码,文件随便放在什么地方。@echo off setlocal echo Starting WSL SSH service... wsl.exe -u root service ssh start echo Getting precise WSL eth0 IP address... :: 使用 grep 抓取 eth0 网卡的 IPv4 地址 for /f "usebackq" %%i in (`wsl.exe --exec bash -c "ip -4 addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'"`) do set WSL_IP=%%i if "%WSL_IP%"=="" ( echo [ERROR] Failed to get WSL IP. pause goto :eof ) echo Clearing old proxy rules... netsh.exe interface portproxy delete v4tov4 listenport=2222 listenaddress=0.0.0.0 protocol=tcp echo Setting up new proxy: Windows:2222 -^> WSL:22 (%WSL_IP%) ... netsh.exe interface portproxy add v4tov4 listenport=2222 listenaddress=0.0.0.0 connectport=22 connectaddress=%WSL_IP% echo. echo ============================================== echo Success! Port Proxy is Active. echo WSL Internal IP : %WSL_IP% (Port 22) echo Windows Proxy : 0.0.0.0 (Port 2222) echo ============================================== endlocal -
防火墙放行 2222 端口,因为我们本质是要从其他电脑上访问 2222 端口
进入防火墙和安全保护 -> 高级设置 -> 入站规则 新建规则 -> 选择端口 -> TCP、特定本地端口输入 2222 -> 允许连接 -> 域、专用 -> 名称设置为 wsl_2222 (自定义)
点击完成即可。这里出于 一丢丢的安全考虑,没有选择公用。
我们局域网工作情况下也一般不会使用公用网络,记得将自己的 wifi 或者热点设置为专用网络。
-
windows 端测试
注意全程 wsl 不要关闭了,关闭了的话 无法连接。
我们新开一个终端来进行转发测试
ssh -p 2222 wsl_user_name@localhost这里的 wsl_user_name 就是你的 wsl 的用户名。如果要输入密码的话 就是 wsl 的用户密码。
不记得密码的话我们直接用root 权限改
sudo passwd wsl_user_name
如果可以直接连接到 wsl,就说明我们的端口转发成功了。
-
其他电脑测试
ssh -p 2222 wsl_user_name@windows_ip这里的 windows_ip 在 windows上 点击 wifi 找到所连接的wifi ,查看信息可以找到 IPv4 地址。
直接 cmd 使用
ifconfig找到无线局域网 WLAN 的 IPv4 地址 也行 -
其他配置
不出意外的话到这里就大功告成了,之后还可以进行免密配置等一系列操作
首先可以在 .ssh 目录下的 config 设置 服务器别名,这里我是 mac 路径,为
/Users/xinfei/.ssh可以仿造如下进行填写,把 HostName 改成 win_ip,User 改成 wsl user name (如果这里你的 win_ip 总是变得花也可以写脚本自动拉取,这里就不展开了,直接AI吧)
Host win_wsl HostName 192.168.203.250 port 2222 User feixin这样之后就可以直接
ssh win_wsl进行登陆
免密配置:
在mac (其他电脑)上使用以下命令登陆一次
ssh-copy-id win_wsl
再输入一次密码,即可解锁免密登陆。
谢谢你读到这里。
更新于 2026-03-22