如何从网络中的另一台机器连接到 Linux 的 Windows 子系统?

如何从网络中的另一台机器连接到 Linux 的 Windows 子系统?

我设置了我的 Ubuntu WSL 实例并在其上运行 SSH 服务器。但是,当我ifconfig在 Ubuntu 控制台上执行此操作时,我的 Ipv4 是172.26.66.223,这与我常规机器的 ipv4 不同192.168.0.248

虽然我可以使用ssh localhostssh 172.26.66.223从同一台机器通过 SSH 进入我的 WSL 实例,但使用ssh 192.168.0.248不起作用。当我尝试ssh 172.26.66.223从同一网络上的另一台计算机执行此操作时,它显示连接超时。

如何从网络上的另一台设备通过 SSH 连接到在我的 WSL 实例上运行的 OpenSSL 服务器?

这是我的网络信息:

在此处输入图片描述

在此处输入图片描述

答案1

您需要运行以下命令:

netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.0.248

来源:从局域网 (LAN) 访问 WSL 2 发行版

答案2

由于您的 WSL2 地址在每次重新启动时都会发生变化,因此您需要转发到的地址每次都会发生变化。如果您使用 Microsoft 文档中描述的“转发”方法,则需要:

  • 每次重启时删除以前的转发规则(最佳做法,至少可以避免留下大量旧的转发规则)
  • 每次重启后转发到新的 WSL2 地址(或wsl --shutdown

更新说明:以下内容将不再适用于从 Microsoft Store 安装的最新 WSL 版本。此处保留此内容是为了保留历史信息,以防 SSH 功能最终在较新的 WSL 版本中得到修复。

我倾向于在视窗(它现在已内置于 Windows 10 和 11 中——请参阅安装说明)。配置完成后,你可以轻松地通过 SSH 进入 WSL 会话:

ssh -t 192.168.0.248 "wsl ~"

这也给你更多的控制权,比如以 root 身份远程登录的能力:

ssh -t 192.168.0.248 "wsl ~ -u root"

或者使用不同的分布:

ssh -t 192.168.0.248 "wsl ~ -d Debian"

更多选项(不需要转发)这个答案

答案3

如果你在 Windows 11 22H2 或更高版本上运行 WSL2,你现在可以使用镜像模式网络

  1. %USERPROFILE%\.wslconfigWindows 中的文件中(如果不存在,请创建它),添加networkingMode=mirrored下面的行[wsl2]

  2. 允许通过 Hyper-V 防火墙进行入站连接。这可以通过在 PowerShell 中以管理员权限运行以下命令之一来完成。

    • 一个端口或端口范围:New-NetFirewallHyperVRule -DisplayName "WSL SSH" -Direction Inbound -VMCreatorId "{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}" -Protocol TCP -LocalPorts 22- 更改-DisplayName为您想要的值以及-LocalPorts您想要的端口或端口范围

    • 所有端口:Set-NetFirewallHyperVVMSetting -Name "{40E0AC32-46A5-438A-A0B2-2B479E8F2E90}" -DefaultInboundAction Allow

  3. 使用新配置运行 WSL,例如使用wsl --shutdown然后wsl重新启动它。

这足以允许sshd通过 LAN 连接其他 WSL 托管的服务器。

资料来源:

相关内容