我希望将 Visual Studio (2022) 连接到我的笔记本电脑,以便交叉编译 C++ 项目。但我遇到了一个问题。它不接受连接。
我在另一个问题上读到,Visual Studio 仅接受 PEM 格式的 rsa 密钥,因此我使用 生成了该格式的密钥ssh-keygen -m PEM -t rsa -b 4096
。我尝试过使用和不使用 pem 格式的各种不同密钥大小(1024、2048、4096、8192),使用和不使用密码。我通过将公钥添加到我的 ubuntu 笔记本电脑上的授权密钥文件中并使用生成的密钥(user@host)从 WSL2 连接来测试每个密钥ssh -i <key_file>
。每次都有效。
我也读过这个问题您应该使用 puttygen 生成密钥,然后导出 openssh 密钥。我也尝试过,有密码和没有密码,但只使用默认密钥大小。再次使用这些密钥从 WSL2 的 bash 终端连接,效果很好,但我无法在 MSVS 中连接。
Visual Studio 连接管理器的错误消息也毫无意义。当我单击“连接”时,它会要求我确认主机的指纹,并将其添加到已知主机文件中。当我单击“是”时,连接管理器的输入字段变为红色。将鼠标悬停在红色字段上会产生结果:
对于“主机名:”以及“端口:”
无法协商主机密钥算法。仅支持 RSA 和 DSA 主机密钥。
我不太清楚这是什么意思。我的主机在其 home/.ssh 目录中有一个 rsa 密钥文件格式。Visual Studio 在首次连接时显示密钥指纹为“ecdsa-sha2-nistp256”,根据文档。
对于“私钥文件:”
使用私钥“<密钥路径>”连接时发生错误。
之前使用空密码的密钥时,密码也会被标记为红色,现在这个指示已经消失。
要让它发挥作用,需要做什么?
答案1
我遇到了类似的问题,就我而言,我正试图连接到 ubuntu 服务器。
systemctl status ssh
当我尝试连接 Visual Studio 时检查 sshd 服务状态( ),出现以下错误:
userauth_pubkey: signature algorithm ssh-rsa not in PubkeyAcceptedAlgorithms [preauth]
然后我将这一行添加PubkeyAcceptedAlgorithms +ssh-rsa
到/etc/ssh/sshd_config
文件中,然后重新启动 sshd 服务(在服务器机器上)
经过这次更改后,我就能够使用 Visual Studio 连接到服务器了。
一些参考资料:
- https://unix.stackexchange.com/questions/721606/ssh-server-gives-userauth-pubkey-key-type-ssh-rsa-not-in-pubkeyacceptedalgorit
- https://learn.microsoft.com/en-us/cpp/linux/connect-to-your-remote-linux-computer?view=msvc-170#configure-the-ssh-server
- https://learn.microsoft.com/en-us/cpp/linux/download-install-and-setup-the-linux-development-workload?view=msvc-170
答案2
如果使用 ssh-keygen 创建私钥,则必须指定开关 -m pem,否则 Visual Studio 将不会接受该密钥。如果您的私钥以 -----BEGIN OPENSSH PRIVATE KEY----- 开头,则必须使用 ssh-keygen -p -f -m pem 进行转换。
https://learn.microsoft.com/en-us/cpp/linux/connect-to-your-remote-linux-computer?view=msvc-170