ssh连接局域网Windows中的WSL2
1. WSL2的配置
不得不说WLS2确实好用,连docker都不用装了,直接Ubuntu启动,再搭配vscode的插件,嘎嘎乱杀,巨硬无敌
1.1 先在WSL2中安装openssh-server
sudo apt update
sudo apt install openssh-server
1.2 配置ssh服务器参数
这里主要需要开启默认端口22和允许密码登录,使用sudo vim修改文件/etc/ssh/sshd_config
这里需要取消Port 22和PasswordAuthetication yes两行的注释
1.3 启动ssh服务,并设置WSL2启动时自动启动服务
sudo service ssh start
sudo systemctl enable ssh
OK,至此WSL2系统的配置完毕,接下来需要对Windows系统进行端口转发。
2.Win系统的配置
2.1 连接到WSL2
使用管理员权限打开powershell,运行如下命令,允许传入连接到WSL2
New-NetFireWallRule -DisplayName "WSL2 SSH" -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
- -DisplayName : 为规则制定一个显示名称,这里是"WSL2 SSH"
- -Direction : 指定规则的方向,这里是"Inbound"(入站)
- -LocalPort : 指定要允许的本地端口,这里是22,即SSH通常使用的端口
- -Action : 指定对匹配的流量采取的动作,这里是"Allow”(允许)
- -Protocol : 指定协议类型,这里是TCP
2.2 端口转发
运行如下命令设置端口转发规则,
netsh interface portproxy add v4tov4 listenport=22 listenaddr=0.0.0.0 connectport=22 connectaddress=WLS2_IP_ADDRESS
上图中的WSL2_IP_ADDRESS需要替换,在你的子系统中使用ifconfig查看具体的命令,如下,这里我查询到的结果是172.31.25.181,
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.31.25.181 netmask 255.255.240.0 broadcast 172.31.31.255
inet6 fe80::215:5dff:fe9d:abf6 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:9d:ab:f6 txqueuelen 1000 (Ethernet)
RX packets 1945 bytes 1496782 (1.4 MB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1328 bytes 158215 (158.2 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
因此我的命令为
netsh interface portproxy add v4tov4 listenport=22 listenaddr=0.0.0.0 connectport=22 connectaddress=172.31.25.181
2.3验证规则
netsh interface portproxy show v4tov4
我这里显示结果为
侦听 ipv4: 连接到 ipv4:
地址 端口 地址 端口
--------------- ---------- --------------- ----------
0.0.0.0 22 172.31.25.181 22
2.4 Win回显请求
这里发现我的设备无法ping通win,因此还需要设置win的防火墙,左下角搜索防火墙
Windows防火墙 --> 高级设置--> 入站规则 --> 在列表里找到"文件和打印机共享(回显请求 - ICMPv4-In)" -> 右键启用规则,并设置其属性里设置为<允许连接> ,如下所示
2.5 远程连接到WSL2
打开终端,确保自己与win在同一个局域网即可,使用如下命令,显示指明端口22,同时获取win的局域网IP地址:
ssh -p 22 usernama@192.168.1.xx