在WSL2中配置SSH并允许局域网内其他机器访问
最近,我在使用Windows Subsystem for Linux 2 (WSL2)时遇到了一个问题:如何在WSL2中启用SSH服务,并允许局域网内的其他机器访问WSL2实例?经过一番研究和尝试,我终于找到了解决方案。在本文中,我将与大家分享这个过程,希望对遇到类似问题的读者有所帮助。
第一步:在WSL2中安装和配置SSH服务
首先,我们需要在WSL2实例中安装和配置SSH服务。以下是具体步骤:
-
更新软件包列表并安装SSH服务器:
bashsudo apt update sudo apt install openssh-server
-
配置SSH服务器:
-
打开SSH配置文件:
bashsudo nano /etc/ssh/sshd_config
-
取消注释
#Port 22
行以指定SSH端口(默认为22)。 -
取消注释
#PasswordAuthentication yes
行以允许密码认证。 -
保存文件并退出编辑器。
-
-
启动SSH服务:
bashsudo service ssh start
-
设置SSH服务在启动时自动启动:
bashsudo systemctl enable ssh
第二步:配置Windows防火墙和端口转发
由于WSL2使用虚拟网络适配器,具有自己的私有IP地址,因此局域网内的其他机器无法直接访问WSL2实例。为了解决这个问题,我们需要在Windows中配置防火墙和端口转发规则。
-
打开Windows PowerShell,以管理员身份运行。
-
运行以下命令,允许传入连接到WSL2:
powershellNew-NetFirewallRule -DisplayName "WSL2 SSH" -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
-
运行以下命令设置端口转发规则,将传入的连接转发到WSL2实例:
powershellnetsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=<WSL2_IP_Address>
请将
<WSL2_IP_Address>
替换为WSL2实例的实际IP地址。 -
验证端口转发规则是否正确设置:
powershellnetsh interface portproxy show v4tov4
第三步:为WSL2配置静态IP地址
由于WSL2实例的IP地址在每次重启后可能会发生变化,为了确保其他机器能够一致地访问WSL2,我们需要为WSL2配置静态IP地址。
-
打开WSL2发行版。
-
使用具有sudo权限的文本编辑器打开
/etc/wsl.conf
文件:bashsudo nano /etc/wsl.conf
-
添加以下内容到文件中:
ini[network] generateResolvConf = false
这将禁用
resolv.conf
文件的自动生成。 -
保存文件并退出编辑器。
-
在
/etc/netplan/
目录下创建一个名为00-wsl.yaml
的新文件:bashsudo nano /etc/netplan/00-wsl.yaml
-
添加以下配置到文件中,将
<desired_ip_address>
替换为您希望分配给WSL2实例的IP地址:yamlnetwork: version: 2 ethernets: eth0: dhcp4: false addresses: [<desired_ip_address>/24] nameservers: addresses: [8.8.8.8]
-
保存文件并退出编辑器。
-
应用新的网络配置:
bashsudo netplan apply
-
重启WSL2实例:
arduinowsl.exe --shutdown
然后重新打开WSL2发行版。
现在,WSL2实例应该具有一个静态IP地址,即使在重启后也不会改变。记得更新Windows PowerShell中的端口转发规则,使用新的静态IP地址:
powershell
netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=<static_ip_address>
请将 <static_ip_address>
替换为您在 00-wsl.yaml
文件中配置的IP地址。
总结
通过以上步骤,我们成功地在WSL2中启用了SSH服务,并允许局域网内的其他机器访问WSL2实例。这个过程涉及以下关键步骤:
- 在WSL2中安装和配置SSH服务器。
- 配置Windows防火墙,允许传入连接到WSL2。
- 设置端口转发规则,将传入的连接转发到WSL2实例。
- 为WSL2配置静态IP地址,确保其他机器能够一致地访问WSL2。
我希望这篇文章对大家有所帮助。如果您有任何问题或建议,欢迎在评论区留言交流。