SSH连接WSL2踩坑记录


最近实验室显卡不够用,显存长期占满。寝室有张1063,跑跑推理,不训练还是可以的。正好最近更了Win11,WSL也升级成了WSLg,感觉在WSL下调用cuda应该足够方便了。

最终目的是在实验室能ssh连到宿舍PC的WSL。

1. 重装WSL-Ubuntu的SSH服务端

重装openssh-server:

# 在WSL内执行
sudo apt purge openssh-server
sudo apt install openssh-server

因为WSL—Ubuntu自带的SSH有问题,本机都连不上去。
如果因为没有公钥导致无法开启ssh服务,那么先生成一个公钥:

# 在WSL内执行
ssh-keygen -A

开启ssh服务端:

# 在WSL内执行
sudo service ssh start

2. 解决WSL的本地IP变化问题

我想在公网(校园网)上连接我的WSL,需要在Win上开启端口映射,把Win的端口映射到WSL的ssh端口上。而端口映射需要知道Win内WSL的本地地址。

每次Win开关机(也就是WSL开关机),WSL的IP地址都会改变,比如WSL的当前IP是172.26.166.163,关闭WSL服务再重新启动后,IP地址就变成了172.28.81.31

经过百度,其实有两种方法可以解决:

  1. 给WSL一个固定的本地地址
  2. 每次WSL服务启动后,获取WSL的本地地址,得到地址后再端口映射

第二种有点麻烦,所以我选择第一种,给WSL一个固定的本地地址。

step 1. 给WSL内部网卡添加固定IP地址:

# 在Windows的shell内执行(可能需要管理员权限)
wsl -d ubuntu -u root ip addr add 172.31.81.57/24 broadcast 172.31.81.0 dev eth0 label eth0:1
  • ubuntu 是WSL的名字,就是微软商店里的名字,有的人装的是ubuntu-18.04
  • 172.*.*.*应该都行,具体Win有没有什么默认规则我就不知道了,我只是把我的WSL上一次的IP给抄过来了。
或者在WSL内执行
sudo ip addr add 172.31.81.57/24 broadcast 172.31.81.0 dev eth0 label eth0:1

step 2. 给Win的WSL虚拟网卡添加固定IP地址:

# 在Windows的shell内执行(可能需要管理员权限)
netsh interface ip add address "vEthernet (WSL)" 172.31.80.1 255.255.240.0

这里的IP地址关系不大,只要和WSL内的IP在同一个网段就行(mask内的数字与WSL的IP相同)

3. 配置端口映射与打开防火墙

在Win中新建一个端口映射服务:

# 在Windows的shell内执行(可能需要管理员权限)
netsh interface portproxy add v4tov4 listenport=8080 connectaddress=172.31.81.57 connectport=22 listenaddress=* protocol=tcp
  • listenport Windows对外监听端口
  • connectaddress WSL内部的IP地址(注意不是Win下面的WSL虚拟网卡地址)
  • connectport 对内映射的端口,即WSL的端口
  • listenaddress Windows对外监听的地址,也可以是0.0.0.0

设置Windows的防火墙,允许监听端口的对内连接:

# 在Windows的shell内执行(可能需要管理员权限)
netsh advfirewall firewall add rule name=”Open Port 8080 for WSL2” dir=in action=allow protocol=TCP localport=8080

localport即上面设置的对外监听的端口

至此,局域网内的其他机器理论上可以通过ssh访问到WSL了,端口号为刚才设置的对外监听端口号:

ssh 192.168.3.44 -p 8080


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM