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

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

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

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

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

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

    bash 复制代码
    sudo apt update
    sudo apt install openssh-server
  2. 配置SSH服务器:

    • 打开SSH配置文件:

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

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

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

  3. 启动SSH服务:

    bash 复制代码
    sudo service ssh start
  4. 设置SSH服务在启动时自动启动:

    bash 复制代码
    sudo systemctl enable ssh

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

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

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

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

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

    powershell 复制代码
    netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=<WSL2_IP_Address>

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

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

    powershell 复制代码
    netsh interface portproxy show v4tov4

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

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

  1. 打开WSL2发行版。

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

    bash 复制代码
    sudo nano /etc/wsl.conf
  3. 添加以下内容到文件中:

    ini 复制代码
    [network]
    generateResolvConf = false

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

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

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

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

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

  8. 应用新的网络配置:

    bash 复制代码
    sudo netplan apply
  9. 重启WSL2实例:

    arduino 复制代码
    wsl.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实例。这个过程涉及以下关键步骤:

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

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

相关推荐
sysin.org7 分钟前
VMware ESXi 7.0U3q macOS Unlocker 集成驱动版更新 OEM BIOS 2.7 支持 Windows Server 2025
windows·macos·esxi·bios·oem·网卡驱动·nvme驱动
神秘的土鸡7 分钟前
Linux中使用Docker容器构建Tomcat容器完整教程
linux·运维·服务器·docker·容器·tomcat
shuxianshrng19 分钟前
大气网格化精细化监管监测系统
大数据·服务器·windows·经验分享
TravisBytes42 分钟前
linux 系统是如何收发数据包
linux·运维·服务器
晚睡早起₍˄·͈༝·͈˄*₎◞ ̑̑42 分钟前
苍穹外卖学习笔记(七)
java·windows·笔记·学习·mybatis
ice___Cpu2 小时前
Linux 基本使用和 web 程序部署 ( 8000 字 Linux 入门 )
linux·运维·前端
z202305082 小时前
linux 之0号进程、1号进程、2号进程
linux·运维·服务器
狐心kitsune3 小时前
erlang学习:Linux常用命令1
linux·学习·erlang
偷偷小野猪3 小时前
想要自动删除浏览器历史记录吗?这样设置就对了
windows·edge浏览器
DREAM依旧4 小时前
《深入了解 Linux 操作系统》
linux