mac连接windows wsl
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
1
2
3
4
5# win 登入 wsl
sudo apt install openssh-server
# 如果启动遇到这个错误 sshd: no hostkeys available -- exiting
# 执行 sudo ssh-keygen -A启动 sshd 服务 并 设置开机自启
1
2sudo systemctl start ssh
sudo systemctl enable sshwindows端 设置转发
(WSL不要关闭了)我们要设置将 win 的2222 端口转发到 wsl 的 22 端口。但是 wsl 的 ip 地址不固定,所以写一个脚本来抓取。
新建一个
sshd.bat文件,写入以下代码,文件随便放在什么地方。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30@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 端口
1
2
3进入防火墙和安全保护 -> 高级设置 -> 入站规则
新建规则 -> 选择端口 -> TCP、特定本地端口输入 2222 -> 允许连接 -> 域、专用 -> 名称设置为 wsl_2222 (自定义)
点击完成即可。这里出于 一丢丢的安全考虑,没有选择公用。
我们局域网工作情况下也一般不会使用公用网络,记得将自己的 wifi 或者热点设置为专用网络。
windows 端测试
注意全程 wsl 不要关闭了,关闭了的话 无法连接。
我们新开一个终端来进行转发测试
1
ssh -p 2222 wsl_user_name@localhost
这里的 wsl_user_name 就是你的 wsl 的用户名。如果要输入密码的话 就是 wsl 的用户密码。
不记得密码的话我们直接用root 权限改
1
sudo passwd wsl_user_name
如果可以直接连接到 wsl,就说明我们的端口转发成功了。
其他电脑测试
1
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吧)
1
2
3
4Host win_wsl
HostName 192.168.203.250
port 2222
User feixin这样之后就可以直接
ssh win_wsl进行登陆
免密配置:
在mac (其他电脑)上使用以下命令登陆一次
1
ssh-copy-id win_wsl
再输入一次密码,即可解锁免密登陆。