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

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

相关推荐
Jiangnan_Cai15 分钟前
Linux 系统 docker 部署 Dify
linux·docker·大模型·dify
Two_brushes.1 小时前
【linux网络】深入理解 TCP/UDP:从基础端口号到可靠传输机制全解析
linux·运维·服务器
FJW0208141 小时前
【Linux】系统引导修复
linux·运维·服务器
慌糖2 小时前
CentOS 安装 Redis 简明指南
linux·redis·centos
设计师小聂!2 小时前
linux常用命令(一)
linux·运维·服务器
hnlucky2 小时前
《Nginx + 双Tomcat实战:域名解析、静态服务与反向代理、负载均衡全指南》
java·linux·服务器·前端·nginx·tomcat·web
cui_win2 小时前
【网络】Linux 内核优化实战 - net.ipv4.tcp_congestion_control
linux·网络·tcp/ip
188_djh3 小时前
# 电脑每次重启都自动启动惠普安装程序,怎么取消?
windows·任务管理器·惠普打印机·msconfig·hpsmartinstall·安装程序自动启动·系统配置工具
甜甜不吃芥末3 小时前
Windows 应用程序的 UI 框架:WPF、WinUI 3 和 UWP的差异区别
windows·ui·wpf
笑稀了的野生俊3 小时前
ImportError: /lib/x86_64-linux-gnu/libc.so.6: version GLIBC_2.32‘ not found
linux·人工智能·ubuntu·大模型·glibc·flash-attn