鉴于你似乎已经解决了ssh的问题,我建议你使用Microsoft的"Remote Development"扩展包来实现你的最终目标(从VSCode远程连接WSL),其中包含了多个扩展。虽然你似乎在考虑使用“Remote - SSH”扩展,但你也可以直接使用“Remote - WSL”扩展。
安装扩展包或者直接安装WSL扩展后,只需要打开你的WSL实例,在代码所在的目录下输入cd
命令,然后输入code .
(包含句点)。这将打开VSCode并在WSL实例中安装一个shim,以允许两者之间进行通信。
更多详细信息请参见Microsoft的文档。
此外,关于你最初提出的问题,你说你编辑了sshd_config以允许密码验证(我认为ChallengeResponseAuthentication的更改是不必要的)。这是一种方法,但最终我建议生成一个SSH密钥对,将私钥复制到诸如C:\Users\yourid\.ssh\id_rsa
之类的位置,并使用它而不是密码登录。
你还提到你无法访问公共端口上的SSH。这是因为WSL2不进行NAT,因此它也无法从第二台计算机访问,除非进行(大量的)额外努力(从Windows到WSL的手动端口转发,每次重启后都必须重新设置,因为WSL接口地址会发生变化)。
正如你已经发现的那样,WSL接口地址是可用的,但要记住它在每次Windows重新启动时都会改变(严格来说,在关闭和重新启动WSL子系统时都会改变)。我认为,你最好使用127.0.0.1或localhost。
但是,我实际上更喜欢远程访问WSL的方法是在Windows 10上安装OpenSSH,端口22。然后你只需要像这样做:ssh -t windowsusername@mycomputername.local wsl
就可以访问WSL实例了。甚至可以通过ssh -t windowsusername@mycomputername.local wsl -d WSLInstanceName
来访问你的多个WSL实例。
当然,如果你使用这种技术,并且仍然想在WSL实例中运行一个SSH服务器,你需要使用不同的端口。但我认为,在WSL下运行SSH时,你应该这样做。否则,你可能会在某个时间点上启动第二个WSL实例并遇到端口冲突。
缺点是Windows OpenSSH->WSL hack不能让你通过SSH运行像VSCode这样的应用程序,但它确实提供了通过SSH超简单地访问WSL,并且可以远程(如果你需要的话)。
sudo service ssh restart
如果是Ubuntu WSL。 - Carl Lee