我设置了我的 Ubuntu WSL 实例并在其上运行 SSH 服务器。但是,当我ifconfig
在 Ubuntu 控制台上执行此操作时,我的 Ipv4 是172.26.66.223,这与我常规机器的 ipv4 不同192.168.0.248
虽然我可以使用ssh localhost
或ssh 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
答案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,你现在可以使用镜像模式网络。
在
%USERPROFILE%\.wslconfig
Windows 中的文件中(如果不存在,请创建它),添加networkingMode=mirrored
下面的行[wsl2]
。允许通过 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
使用新配置运行 WSL,例如使用
wsl --shutdown
然后wsl
重新启动它。
这足以允许sshd
通过 LAN 连接其他 WSL 托管的服务器。
资料来源: