如何在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。

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

相关推荐
比奥利奥还傲.20 分钟前
Linux运维安全新范式:基于TCPIP与SSH密钥的无密码认证实战
linux·运维·安全
泰勒朗斯2 小时前
ffmpeg 中config 文件一些理解
windows·microsoft·ffmpeg
cz_r5552 小时前
在使用ffmpeg时遇到了复制路径在终端输入指令后,报错的解决方法
windows
果子⌂2 小时前
容器技术入门之Docker环境部署
linux·运维·docker
深度学习04073 小时前
【Linux服务器】-安装ftp与sftp服务
linux·运维·服务器
iteye_99394 小时前
让 3 个线程串行的几种方式
java·linux
渡我白衣4 小时前
Linux操作系统:再谈虚拟地址空间
linux
阿巴~阿巴~4 小时前
Linux 第一个系统程序 - 进度条
linux·服务器·bash
DIY机器人工房5 小时前
代码详细注释:通过stat()和lstat()系统调用获取文件的详细属性信息
linux·嵌入式
摆烂工程师5 小时前
(5千字总结)国内如何安装和使用 Claude Code 的保姆级教程 - 支持Mac和Windows用户
windows·macos·claude