我有一台安装了 WSL2 的 Windows 10 机器(运行 Ubuntu 22.04.1 LTS),还有一台位于 Windows 机器 LAN 中的 Linux 机器。我可以从 Windows 主机连接到在 WSL 中运行的 SSH 服务器。现在我想从 Linux 机器连接到 WSL,或者从 WSL 连接到 Linux 机器。现在根据这个答案我在 Windows 系统上的 PowerShell 中运行了以下命令:
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=4000 connectaddress=192.168.101.100
192.168.101.100
WSL 的 IP 在哪里。那么我该如何从 Linux 机器直接通过 SSH 连接到 WSL?我试过了ssh -p 4000 windowsHost@windowsAdress
,但没有用:
#ssh -vvv -p 4000 windowsHost@windowsAdress
OpenSSH_6.7p1 Debian-5+deb8u8, OpenSSL 1.0.1t 3 May 2016
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to windowsAdress [windowsAdress] port 4000.
...它就卡在那里。
答案1
在你的其他问题,您显示 /etc/ssh/sshd_config
SSH 服务器在默认端口 22 上运行。如果是这种情况,则需要将端口转发调整connectport
为:
netsh interface portproxy add v4tov4 listenport=4000 listenaddress=0.0.0.0 connectport=22 connectaddress=192.168.101.100
这会将连接从 Windows 主机上的端口 4000 转发到 WSL2 主机上的端口 22。
您可能还需要防火墙规则,如评论中所述。但是,您应该通常会在您第一次使用时收到 Windows Defender 防火墙的请求以允许连接。
请记住,connectaddress
每次重新启动(或 WSL2 重新启动)时,您都必须调整,因为 IP 地址是动态分配的。每次删除旧的端口转发规则也是一种很好的做法。因此,我发现使用 SSH 本身来处理端口转发更容易。我不会在这里重复所有步骤,但你可以在本答案的“选项 2”。