在 Win10 上,在运行 Ubuntu 20 的 WSL 2 中,我安装了在不同于 22 的端口上运行的 sshd,即 2222。在防火墙中,我添加了 TCP 端口 2222 的传入规则。
从 Windows 命令提示符下,ssh -p 2222 127.0.0.1
可以正常工作。ssh -p 2222 xxx.xxx.xxx.xxx
WSL 报告的虚线四边形也是如此ifconfig
。
从 Windows 命令提示符(不是WSL)ipconfig
报告192.168.1.yyy
,它在我的路由器上的地址。通过该地址,Windows 到达并被该路由器上的其他 192.168.1 主机(Windows、Mac、Linux;ping、http、安装磁盘、仅来自WSL 的 ssh)访问。
在 Windows 命令提示符下,ssh -p 2222 192.168.1.yyy
失败并显示Connection refused
. 我怎样才能使它工作?
PuTTY 0.74 的行为与 Windows 命令提示符的 ssh 相同。
ssh -v -v -v
添加可能有用的诊断:
debug1: Connecting to 192.168.1.100 [192.168.1.yyy] port 2222.
debug3: finish_connect - ERROR: async io completed with error: 10061, io:000002E243EDC460
debug1: connect to address 192.168.1.yyy port 2222: Connection refused
如果在 sshd_config 我将 ListenAddress 限制为
192.168.1.yyy:2222
,那么其他传入的 ssh 将按预期失败。所以需要配置的可能不是 ssh 而是 WSL 本身。ifconfig -a
没有提到任何 192.168 的。上下文:这是从路由器的其他主机启用 ssh 进入 WSL 的垫脚石。目前 WSL 的 /etc/ssh/sshd_config 使用 PasswordAuthentication;稍后我会将其更改为 PubKeyAuthentication。
WSL2 的简短答案 - 使用 Windows OpenSSH 作为跳转主机进入 WSL 实例。您可以通过 ssh'ing 到 Windows 然后运行
wsl
命令(例如ssh user@windowsip wsl
)来执行此操作,或者,如果您需要更复杂的东西(“真正的”ssh 访问),然后在 Windows 主机和 WSL 实例上使用 SSH(例如ssh -o "ProxyCommand ssh -W %h:%p windowshost.local" -o "StrictHostKeyChecking=no -p 2224 localhost
)。有关更多详细信息,请参阅此答案。