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

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

相关推荐
学嵌入式的小杨同学1 小时前
从零打造 Linux 终端 MP3 播放器!用 C 语言实现音乐自由
linux·c语言·开发语言·前端·vscode·ci/cd·vim
EverydayJoy^v^2 小时前
RH134学习进程——十二.运行容器(1)
linux·运维·容器
syseptember2 小时前
Linux网络基础
linux·网络·arm开发
zl_dfq2 小时前
Linux 之 【多线程】(线程的概念、Linux中的线程、页表)
linux
郝亚军3 小时前
如何在Ubuntu和win10/11之间通过samba访问对方的文件
linux·服务器·ubuntu
曦云沐3 小时前
【避坑指南】Ubuntu更新报错“Repository is not signed”的快速修复
linux·ubuntu·docker
带土14 小时前
10. .out文件
linux
陈葛杰4 小时前
PE系统安装教程(傻瓜版)
windows
STCNXPARM4 小时前
Linux camera之V4L2子系统详解
android·linux·camera·v4l2架构
yueyuexiaokeai15 小时前
linux kernel常用函数整理
linux·c语言