我有一台装有 Visual Studio 2022 的 Windows 11 电脑。我可以使用 Putty 通过 localhost 连接到 WSL2 内的 ssh 服务器。但是当我尝试在 Visual Studio 连接管理器中使用 localhost、端口 22、用户名和密码为 WSL2 添加连接时,日志中出现错误
C:\Users\***\Documents\Visual Studio 2019\RemoteConnectionsLogging
... 说 ...
10:03:13.5244226 [Info, Thread 1] liblinux.RemoteSystemBase: Connecting over SSH to localhost:22
10:03:15.5765128 [Info, Thread 1] liblinux.HostKeyVerifier: Connection failed.
10:03:15.5825127 [Info, Thread 1] liblinux.HostKeyVerifier: System.Net.Sockets.SocketException (0x80004005): Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte
该错误是德语的,但它表示无法与 localhost 建立 TCP 连接。当我尝试使用 Win32 nmap 包中的 ncat 连接到 localhost:22 时,我可以从 WSL2 内部的 ssh 服务器看到 SSH 握手的第一步:
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.4
答案1
为了能够通过 SSH 进入 WSL2 发行版:
在 WSL 中安装
openssh-server
:sudo apt install openssh-server
由于 Windows 已经使用了我们的 SSH 的默认端口(通常为 22),因此请(例如)用 2222 替换:
编辑/etc/ssh/sshd_config
以下三处更改:Port 2222 ListenAddress 0.0.0.0 PasswordAuthentication yes
要删除启动 ssh 服务的密码要求,请
/etc/sudoers.d/
通过添加以下行进行编辑:%sudo ALL=NOPASSWD: /usr/sbin/service ssh *
最后启动服务:
service ssh start
更多信息 通过 SSH 远程可靠地登录 WSL2 主机。
答案2
你可能想尝试使用127.0.0.1代替本地主机。
在现代系统中,本地主机解析为 IPv4(127.0.0.1)和 IPv6(::1),IPv6 将首先推出。通常情况下,这不是问题,因为如果 IPv6 无法工作,软件将很快回退到 IPv4。
回退在这里不起作用,因为它根本没有实现SSH.NET,Visual Studio 使用的底层库。它只取第一个地址(所以::1) 并随之而来。
据推测,WSL 中的本地主机转发也适用于 IPv6 和sshd通常也会在 IPv6 上监听,谁知道呢。