如何在WSL2中启用SSH服务,并允许局域网内的其他机器访问WSL2实例?

4,107 阅读3分钟

在WSL2中配置SSH并允许局域网内其他机器访问

最近,我在使用Windows Subsystem for Linux 2 (WSL2)时遇到了一个问题:如何在WSL2中启用SSH服务,并允许局域网内的其他机器访问WSL2实例?经过一番研究和尝试,我终于找到了解决方案。在本文中,我将与大家分享这个过程,希望对遇到类似问题的读者有所帮助。

第一步:在WSL2中安装和配置SSH服务

首先,我们需要在WSL2实例中安装和配置SSH服务。以下是具体步骤:

  1. 更新软件包列表并安装SSH服务器:

    sudo apt update
    sudo apt install openssh-server
    
  2. 配置SSH服务器:

    • 打开SSH配置文件:

      sudo nano /etc/ssh/sshd_config
      
    • 取消注释 #Port 22 行以指定SSH端口(默认为22)。

    • 取消注释 #PasswordAuthentication yes 行以允许密码认证。

    • 保存文件并退出编辑器。

  3. 启动SSH服务:

    sudo service ssh start
    
  4. 设置SSH服务在启动时自动启动:

    sudo systemctl enable ssh
    

第二步:配置Windows防火墙和端口转发

由于WSL2使用虚拟网络适配器,具有自己的私有IP地址,因此局域网内的其他机器无法直接访问WSL2实例。为了解决这个问题,我们需要在Windows中配置防火墙和端口转发规则。

  1. 打开Windows PowerShell,以管理员身份运行。

  2. 运行以下命令,允许传入连接到WSL2:

    New-NetFirewallRule -DisplayName "WSL2 SSH" -Direction Inbound -LocalPort 22 -Action Allow -Protocol TCP
    
  3. 运行以下命令设置端口转发规则,将传入的连接转发到WSL2实例:

    netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=<WSL2_IP_Address>
    

    请将 <WSL2_IP_Address> 替换为WSL2实例的实际IP地址。

  4. 验证端口转发规则是否正确设置:

    netsh interface portproxy show v4tov4
    

第三步:为WSL2配置静态IP地址

由于WSL2实例的IP地址在每次重启后可能会发生变化,为了确保其他机器能够一致地访问WSL2,我们需要为WSL2配置静态IP地址。

  1. 打开WSL2发行版。

  2. 使用具有sudo权限的文本编辑器打开 /etc/wsl.conf 文件:

    sudo nano /etc/wsl.conf
    
  3. 添加以下内容到文件中:

    [network]
    generateResolvConf = false
    

    这将禁用 resolv.conf 文件的自动生成。

  4. 保存文件并退出编辑器。

  5. /etc/netplan/ 目录下创建一个名为 00-wsl.yaml 的新文件:

    sudo nano /etc/netplan/00-wsl.yaml
    
  6. 添加以下配置到文件中,将 <desired_ip_address> 替换为您希望分配给WSL2实例的IP地址:

    network:
      version: 2
      ethernets:
        eth0:
          dhcp4: false
          addresses: [<desired_ip_address>/24]
          nameservers:
            addresses: [8.8.8.8]
    
  7. 保存文件并退出编辑器。

  8. 应用新的网络配置:

    sudo netplan apply
    
  9. 重启WSL2实例:

    wsl.exe --shutdown
    

    然后重新打开WSL2发行版。

现在,WSL2实例应该具有一个静态IP地址,即使在重启后也不会改变。记得更新Windows PowerShell中的端口转发规则,使用新的静态IP地址:

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实例。这个过程涉及以下关键步骤:

  1. 在WSL2中安装和配置SSH服务器。
  2. 配置Windows防火墙,允许传入连接到WSL2。
  3. 设置端口转发规则,将传入的连接转发到WSL2实例。
  4. 为WSL2配置静态IP地址,确保其他机器能够一致地访问WSL2。

我希望这篇文章对大家有所帮助。如果您有任何问题或建议,欢迎在评论区留言交流。