Git 错误未找到匹配的主机密钥类型。他们的报价:ssh-rsa

Jar*_*děk 221 git ssh rsa ssh-keys

使用时出现以下错误git

$ git pull
Unable to negotiate with 172.16.42.42 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.
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个错误?

bk2*_*204 402

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

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

如果您目前确实需要将 SSH 与 Azure DevOps 结合使用,您可以在~/.ssh/config文件中添加一个条目来解决此问题:

Host ssh.dev.azure.com
    User git
    PubkeyAcceptedAlgorithms +ssh-rsa
    HostkeyAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)

但是,请注意,这是一种解决方法,并且已知它是不安全的,因此您应该联系 Azure DevOps 了解此问题并切换到 HTTPS,直到他们这样做为止,或者转移到其他地方。

  • 我在 Cygwin 的 git 更新 2.32 => 2.34 后遇到了这个问题,这个答案修复了它,谢谢! (4认同)
  • 不幸的是,将此选项放入“~/.ssh/config”可能会破坏依赖旧版 OpenSSH 的其他软件。我最终使用了已弃用的名称“PubkeyAcceptedKeyTypes”而不是“PubkeyAcceptedAlgorithms”(如[此处](https://github.com/git-for-windows/git/issues/3468#issuecomment-965152050)所述)。 (2认同)

Cer*_*vEd 102

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

\n

Azure DevOps (TFS) 提供通过ssh-rsa. 正如bk2204 的答案中所述,该算法不被认为是加密安全的。

\n

由于它被认为很弱,OpenSSH在 2020 年 2 月 14 日弃用SHA-1in 8.2

\n
\n

现在可以[1]以不到 5 万美元的价格针对\nSHA-1 哈希算法执行选择前缀攻击。因此,我们将在不久的将来版本中默认禁用依赖于 SHA-1 的“ssh-rsa”公钥签名算法。

\n
\n

Azure Devops Services随后发布了一个补丁,以允许SHA-2

\n

2021 年 5 月 5 日,Azure DevOps 文档进行了更新,提及使用RSA 3072.

\n

问:这是真的吗?

\n

\xc2\xaf\\_(\xe3\x83\x84)_/\xc2\xaf

\n

问:支持哪些算法?

\n

没有说任何地方。大概只是ssh-rsa

\n

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

\n

添加这个

\n
  HostkeyAlgorithms +ssh-rsa\n  PubkeyAcceptedAlgorithms +ssh-rsa\n
Run Code Online (Sandbox Code Playgroud)\n

给你的~/.ssh/config

\n
Host your-azure-devops-domain\n  IdentityFile ~/.ssh/id_rsa\n  IdentitiesOnly yes\n  HostkeyAlgorithms +ssh-rsa\n  PubkeyAcceptedAlgorithms +ssh-rsa\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n

是的\n他们\n

\n

问:他们关心吗?

\n

\n这是一个\n功能

\n

  • 截至 2022 年 8 月 1 日,Azure DevOps_Services_ 仍然使用 ssh-rsa,因此他们声称在 2020 年修补它的说法是错误的。 (6认同)
  • 谢谢!更新到 Ubuntu 22.04 后,这对我起了作用。 (4认同)

Jar*_*děk 64

根据这篇文章,您可以将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
Run Code Online (Sandbox Code Playgroud)

  • `IdentitiesOnly yes PubkeyAcceptedAlgorithms +ssh-rsa HostkeyAlgorithms +ssh-rsa` 在 CodeCommit 设置后遇到同样的问题,粘贴以上 3 行通过 SSH 成功验证了 git,谢谢! (4认同)
  • 这也适用于“vs-ssh.visualstudio.com”等主机名 (3认同)

张馆长*_*张馆长 53

scp 或 ssh 可以使用这个

ssh -p 22 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa  user@myhost
# or scp
scp -P 22 -o HostKeyAlgorithms=+ssh-rsa -o PubkeyAcceptedKeyTypes=+ssh-rsa  user@myhost
Run Code Online (Sandbox Code Playgroud)


Esb*_*rdt 20

对于那些使用 Azure DevOps 的用户,您应该使用以下~/.ssh/config ,因为 Azure 在其Clone Repository中返回的 url 有所不同:

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

Host vs-ssh.visualstudio.com
  PubkeyAcceptedAlgorithms +ssh-rsa
  HostkeyAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)


小智 15

在您的~/.ssh/config文件中,添加这些行。

Host *.drush.in
    HostkeyAlgorithms +ssh-rsa
    PubkeyAcceptedAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)


小智 10

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

cd ~/.ssh/
vim config

Host [Hostname]
User [User]
PubkeyAcceptedAlgorithms +ssh-rsa
HostkeyAlgorithms +ssh-rsa
Run Code Online (Sandbox Code Playgroud)

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


小智 10

有 2 个步骤:

  1. 将配置文件(不带扩展名)添加到您的~/.ssh/目录中。

  2. 将以下内容添加到配置文件中:

    HostkeyAlgorithms +ssh-rsa    
    PubkeyAcceptedAlgorithms +ssh-rsa
    
    Run Code Online (Sandbox Code Playgroud)