在 Win10 上,在运行 Ubuntu 20 的 WSL 2 中,我安装了在不同于 22 的端口(即 2222)上运行的 sshd。我在防火墙中为 TCP 端口 2222 添加了一条传入规则。
从 Windows 命令提示符中,可以正常工作。对于 WSL 的 报告的点分四元组,ssh -p 2222 127.0.0.1
也是如此。ssh -p 2222 xxx.xxx.xxx.xxx
ifconfig
从 Windows 命令提示符 (不是WSL)ipconfig
报告其192.168.1.yyy
在我的路由器上的地址。通过该地址,Windows 可以访问该路由器上的其他 192.168.1 主机(Windows、Mac、Linux;ping、http、安装磁盘、ssh)并被访问仅来自请参阅 WSL。
在 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。
答案1
WSL2 的简短答案 - 使用 Windows OpenSSH 作为进入 WSL 实例的跳转主机。您可以通过 ssh 连接到 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
)。
有关详细信息,请参阅这个答案。