无法与 40.74.28.9 22 端口连接上: 找不到匹配的主机密钥类型 - no matching host key type found. Their offer: ssh-rsa

在开始使用 NixOS 作为一个新的包管理系统之后,在 Azure DevOps 存储库和 rsa ssh key 中使用 git 时,我得到了以下错误:

jaroslavbezdek@mac> git pull
Unable to negotiate with 40.74.28.9 port 22: no matching host key type found. Their offer: ssh-rsa
fatal: Could not read from remote repository.


Please make sure you have the correct access rights
and the repository exists.

我能做什么?

183327 次浏览

根据 这篇文章,您可以将 ssh.dev.azure.com主机配置添加到您的 ~/.ssh/config文件:

为我工作的最终 ~/.ssh/config:

Host ssh.dev.azure.com
HostName ssh.dev.azure.com
User git
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

使用 SSH,有几种不同类型的密钥,RSA 密钥(ssh-rsa)类型可以支持多种签名。签名类型 ssh-rsa是指具有 SHA-1的 RSA,而签名类型 rsa-sha2-256是具有 SHA-256的 RSA,而 rsa-sha2-512是具有 SHA-512的 RSA。

对于 Azure DevOps,它只支持 SHA-1类型的 RSA,而 SHA-1被认为是非常弱的。这实际上意味着没有通过 SSH 连接到它的安全方法,在他们解决这个问题之前,您最好使用 HTTPS 或其他托管服务。GitHub、 GitLab 和 Bitbucket 都支持安全的身份验证方法。

如果你现在真的需要在 Azure DevOps 中使用 SSH,你可以在你的 ~/.ssh/config文件中添加一个条目来解决这个问题:

Host ssh.dev.azure.com
User git
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

然而,请注意,这是一个解决方案,并且已知它是不安全的,因此您应该就这个问题与 Azure DevOps 联系,并切换到 HTTPS,直到他们这样做,或者转移到其他地方。

OpenSSH 将报告错误 no matching host key type found. Their offer: ssh-rsa 如果它所连接的服务器提供通过 ssh-rsa( RSA/SHA1)进行身份验证。

Azure Devops (TFS)提供通过 ssh-rsa进行身份验证。

由于它被认为是弱的,OpenSSH 不赞成在2020-02-14年在 8.2中使用 SHA-1

现在可以[1]对 SHA-1哈希算法少于美元 $50K。因此,我们将 禁用“ ssh-rsa”公钥签名算法 在不久的将来发布的 SHA-1默认。

Azure 发展 服务随后 宣布了一个补丁允许 SHA-2

在2021年5月5日,Azure DevOps 文档中提到了使用 RSA 3072

问: 这是真的吗?

¯\_(ツ)_/¯

问: 支持哪些算法?

上面没说,可能只有 ssh-rsa

问: 如何使用不安全的加密算法

加上这个

  HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

到你的 ~/.ssh/config

Host your-azure-devops-domain
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa

问: 微软是否意识到这是一个问题?

是的 他们 是。

问: 他们在乎吗?

没有 这是一个 特写

在 NixOS 21.11中,openSSH 被更新为8.8 p1(参见 更衣室)。OpenSSH 不推荐使用 ssh-rsa 和其他一些不安全的密码。

如果我理解正确的话,您只使用 nix 作为包管理器,而不是 NixOS。如果是这种情况,您可以按照指南在其余的答案(编辑 ~/.ssh/config)。

但是,当您使用 NixOS 配置服务器时,您可以为 ssh 客户机重新启用 ssh-rsa,方法是在 configuration.nix中添加:

programs.ssh.extraConfig = ''
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
''

要为 openssh 服务器重新启用不安全的 ssh-rsa 密码(例如,当旧客户机连接到服务器时) ,只需在 configuration.nix中添加以下代码行:

services.openssh.extraConfig = ''
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
'';

更正了公布的答案。我也有同样的问题,我用下面的代码片段修复了它:

Host YOUR-DOMAIN
Hostname YOUR-DOMAIN
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
HostKeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa

不要忘记用在 AzureDevOps 上使用的域替换 YOUR-DOMAIN

对于 windows 10和 git 2.32.0版本,解决方案的格式并不适合我。这个片段对我很有用

= Hostname.com
IdentityFile = ~/. ssh/id _ rsa
= yes
Hostkey 算法 = + ssh-rsa
PubkeyAcceptedStrategies = + ssh-rsa < br >

我也遇到了这个问题,这对我很有效:

cd ~/.ssh/
vim config


Host [Hostname]
User [User]
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

对于一些主机名,我遇到了这个问题,所以现在我的 ssh 配置文件中有几个这样的配置。

Scp 或 ssh 可以使用这个

ssh -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa  user@myhost -p 22

我谷歌了很多关于这个错误: 我有 Ubuntu22.04和这里所有我的配置。
我希望它能帮到别人。

linux@linux:~$ cat /home/username/.ssh/config

Host *


KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512
Ciphers aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr


User username # it depends on your login; this one only for understanding


PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

还有:

/etc/ssh/sshd_config

# Ciphers and keying


Ciphers             aes128-cbc,3des-cbc
KexAlgorithms +diffie-hellman-group1-sha1,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512


HostkeyAlgorithms ssh-dss,ssh-rsa
KexAlgorithms diffie-hellman-group1-sha1

我遇到了这个问题,原来是因为我的计算机引用了错误的 ssh.exe 文件。

运行命令:

which ssh.exe

如果这不返回 OpenSSH/ssh.exe,那么这可能是您的问题。

获取返回值并将 ssh.exe 文件重命名为 ssh.exe.org

快跑

which ssh.exe

现在它应该显示 OpenSSH/ssh.exe 文件。

在为 bitbucket 设置 SSH 密钥时,我在 Windows 机器上也遇到了这个问题

最初,在使用 Ssh-keygen命令生成公钥和私钥文件时没有创建配置文件,因此我使用 GitBash创建配置文件,并在其上编写了以下内容。

创建文件

touch config

打开和更新创建的文件

nano config

添加到配置文件的内容

Host [Hostname]
HostName [Hostname]
IdentityFile ~/.ssh/id_rsa
IdentitiesOnly yes
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

注意: 如果您正在使用组织的 bitbucket 帐户,主机名将不同,否则默认情况下它将是 bitbucket. org

对于那些使用 Azure DevOps 的用户,你应该使用下面的 ~/. ssh/config,因为 Azure 有一个可以改变它在 克隆仓库中返回的 url:

Host ssh.dev.azure.com
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa


Host vs-ssh.visualstudio.com
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa

~/.ssh/config文件中,添加以下行。

Host *.drush.in
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa