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