卖兜搞IT

如何SSH远程连接WSL2

如何SSH远程连接WSL2

看到有B站朋友问这个问题,就简单说一下,虽然我个人觉得这个需求貌似不是很常见?原视频可以点击阅读原文。

WSL2的网络

访问WSL2主机的shell,通过IP命令可以查看WSL2的IP地址

➜~ ip addr | grep eth05: eth0:<BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP groupdefault qlen 1000    inet 172.21.141.83/20 brd 172.21.143.255 scope global eth0➜~

但是如果你打开WSL2所在的windows的powershell或者cmd,通过 ipconfig查看IP,会发现你的windows IP并不是172.21这个网段的。

WSL2有自己的网络,这个网络连接到了一个vswitch上,一个叫WSL的vSwtich上。然后通过NAT实现了对外的访问,这也是为啥你的WSL2主机可以访问外部网络的原因。

Image

WSL2其实也是一个hyper-v的虚拟机而已。如果要画一下网络图,大概如下。

Image

外部访问

要实现外部的机器能访问到WSL2,需要做SSH的端口转发。

在你家同一个路由器下的电脑,他们之间的IP是互通的,但是如果要访问到里面的WSL2, 需要配置端口转发,简单说就是在你的windows10上开一个端口,然后然后把所有到这个端口的流量转发到WSL2里某一个端口上。

以Ubuntu为例,可以如下进行

安装配置ssh server

在WSL2上安装 ssh server

sudo apt install openssh-server

然后配置,端口,以及允许密码访问(当然也可以禁掉,只允许SSH访问)

sudo vim /etc/ssh/sshd_config

在配置文件确保下面几个未注释或者修改成下面的值,其中端口号我选择了2222

Port2222ListenAddress0.0.0.0PasswordAuthentication yes

然后启动或者重启ssh后台

sudo service ssh start

在windows10配置端口转发和防火墙

以下命令需要通过管理员打开CMD或者powershell进行

先配置端口转发

netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=2222 connectaddress=172.23.129.80 connectport=2222

再打开防火墙,允许2222端口流量进来。

netsh advfirewall firewall add rule name=”OpenPort2222for WSL2” dir=in action=allow protocol=TCP localport=2222

测试

找到一台同一网络的机器,然后通过ssh访问你的windows IP + 端口2222即可

ssh -p 2222 username@window-ip