通过 SSH 从 windows 10 进入 wsl2 ubuntu

SSH'ing from windows 10 into wsl2 ubuntu

我对这项业务相当陌生,我不明白如何从我的 win10 机器通过 SSH 连接到我安装的 wsl2 ubuntu 20.4

基本上,我遵循了this tutorial,但我不断收到以下错误:

有时我收到错误“sshd:没有可用的主机密钥——正在退出”,所以我按照 this fix 进行操作,但随后我收到了前面提到的错误。我应该从 /etc/ssh 文件夹中删除任何内容吗?

最终目标是通过 vs-code ssh,但我想一旦我可以从 powershell 做到这一点,它与 vs-code 是一样的。

您似乎需要输入 /etc/ssh/sshd_config(具有 sudo 权限)并更改以下行:

  • ChallengeResponseAuthentication yes
  • PasswordAuthentication yes

由于您似乎已经解决了 ssh 问题,我建议您使用 Microsoft 的“远程开发”扩展包可以更好地实现您的最终目标(“从 VSCode ssh 进入 WSL”,其中包括几个扩展。虽然听起来您正在考虑使用“Remote - SSH”扩展,但您也可以直接使用“Remote - WSL”扩展。

直接安装扩展包或 WSL 扩展后,只需打开您的 WSL 实例,cd 到包含您的代码的目录,然后 code .(包括句点)。这将打开 VSCode 并将垫片安装到 WSL 实例中,这将允许两者之间进行通信。

有关详细信息,请参阅 docs from Microsoft

此外,关于您最初问题的主题,您说您编辑了 sshd_config 以允许密码验证(我认为 ChallengeResponseAuthentication 更改没有必要)。这是一种方法,但最终我建议生成一个 SSH 密钥对,将私钥复制到 C:\Users\yourid\.ssh\id_rsa 之类的东西并使用它而不是密码登录。

并且您在最初的问题中提到您无法在 public 端口上访问 SSH。这是因为 WSL2 不执行 NAT,因此如果没有(很多)额外的努力(从 Windows 到 WSL 的手动端口转发,必须在重新启动,因为 WSL 接口地址将更改)。

如您所见,WSL 接口地址将起作用,但请记住它会在每次 Windows 重新启动时发生变化(从技术上讲,我认为,任何时候 WSL 子系统关闭并重新启动) .恕我直言,你最好使用 127.0.0.1 或本地主机。

但实际上,我首选的远程访问 WSL 的方法是在 Windows 10,端口 22 上安装 OpenSSH。然后您可以简单地执行类似 ssh -t windowsusername@mycomputername.local wsl 的操作来访问 WSL 实例。当您的计算机上有多个 WSL 实例时,您甚至可以使用 ssh -t windowsusername@mycomputername.local wsl -d WSLInstanceName.

执行此操作

当然,如果您使用此技术,并且仍想 运行 WSL 实例中的 SSH 服务器,则需要使用不同的端口。但我真的认为当 运行 在 WSL 下使用 SSH 时无论如何你都应该这样做。否则,您可能会在某个时候启动第二个 WSL 实例,并且 运行 无论如何都会发生端口冲突。

缺点是 Windows OpenSSH -> WSL hack 不允许您通过 SSH 运行 之类的东西 VSCode,但它确实提供了超级简单的访问通过 SSH 的 WSL,也可以远程工作(如果您需要的话)。