如何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 1000inet 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主机可以访问外部网络的原因。
WSL2其实也是一个hyper-v的虚拟机而已。如果要画一下网络图,大概如下。
外部访问
要实现外部的机器能访问到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