BitBucket:主机密钥验证失败。

103

我想将远程仓库克隆到本地机器。我使用了以下命令:

git clone git@bitbucket.org:<username>/<repo_name>.git

我收到了消息:

The authenticity of host 'bitbucket.org (104.192.143.3)' can't be
established. RSA key fingerprint is
SHA256:****. Are you sure you
want to continue connecting (yes/no)?  Host key verification failed.
fatal: Could not read from remote repository.

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

我想提醒您,我已经解决了ssh的问题。我通过命令“ssh-keygen”生成了一个ssh密钥,并将~/.ssh/id_rsa.pub的内容复制到Bitbucket设置 -> SSH密钥中(根据此链接:https://confluence.atlassian.com/bitbucket/set-up-ssh-for-git-728138079.html
我还查看了我的“用户和组访问权限”,发现如下情况:

enter image description here

请您给予建议。

你检查过这个项目的权限了吗? - Ivan
我该如何检查它?是在设置->分支权限吗? - CrazySynthax
不。前往存储库 -> 设置 -> 用户和组访问。 - Ivan
我已经将截图添加到了原始帖子中。 - CrazySynthax
"主机密钥验证失败"!!! - Jakuje
@Jakuje,好的...我需要做什么? - CrazySynthax
11个回答

144

这条消息的意思是:

主机密钥验证失败。

没有关于身份验证的内容,因此您正在处理错误的领域。这意味着 bitbucket.org 的主机密钥 不在您的 ~/.ssh/known_hosts 中,您的客户端无法验证它。有很多方法可以解决此问题, 但如何正确地解决它呢?

位于 bitbucket 手册中的 章节 描述了他们的公钥和指纹的外观。所以:

  1. Run ssh bitbucket.org
  2. It will prompt you with one of the fingerprints:

    The authenticity of host 'bitbucket.org (104.192.143.3)' can't be established.
    RSA key fingerprint is SHA256:*****.
    Are you sure you want to continue connecting (yes/no)?
    
  3. You verify the fingerprint in the prompt is the same as on the bitbucket website:

    SHA256:zzXQOXSRBEiUtuE8AikJYKwbHaxvSc0ojez9YXaGp1A bitbucket.org (RSA)
    
  4. You write yes and press enter to verify the connection works.

或者直接从Bitbucket网站复制公钥到~/.ssh/known_hosts文件中。

echo "bitbucket.org,104.192.143.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==" >> ~/.ssh/known_hosts

如果以上方法都无法解决问题,请运行ssh -vvv bitbucket.org命令并将输出内容发到编辑后的问题中。

1
当我输入:“ssh bitbucket.org”时,我得到以下信息: 主机“bitbucket.org(104.192.143.3)”的真实性无法确定。 RSA密钥指纹为SHA256:*****。 您确定要继续连接吗(是/否)?是 主机密钥验证失败。 - CrazySynthax
"2. 它将提示您其中一个指纹:"RSA密钥指纹为SHA256:*****。"(来自帖子中的链接)。" - Jakuje
很遗憾,您链接的网站不再提到zzXQOXSRBEiUtuE8AikJYKwbHaxvSc0ojez9YXaGp1A。然而,它仍然是正确的。因此,您的答案已成为权威。 - Bruno Bronosky
1
@BrunoBronosky 公钥指纹仍然可在 BitBucket 网站上找到(https://confluence.atlassian.com/bitbucket/troubleshoot-ssh-issues-271943403.html),该网站还提供了一些详细信息。 - Alex
1
谢谢,@Alex。我已经将新的URL加入到答案中了。 - Bruno Bronosky
1
我再次更新了链接,原始链接只有MD5,没有SHA-256。我最终在这个问答中找到了答案。 Bitbucket擅长隐藏SSH密钥,这听起来不太对;SSH密钥应该是SSH信任模型的众所周知。它应该是在谷歌搜索“Bitbucket主机密钥”时的第一个结果。相反,GitHub公钥通常是第一个结果。 - Franklin Yu

70

2023年5月/6月更新:

必须行动:更新您的Bitbucket Cloud SSH主机密钥

添加了新的主机密钥

  • 2023年5月15日 2300 UTC,我们使用ECDSA和Ed25519算法添加了两个新的主机密钥
  • 2023年6月20日 1700 UTC,我们将更换当前的RSA主机密钥
  • 2023年6月20日 1700 UTC,我们还将移除DSA主机密钥;该密钥将完全停止工作。

所以... 简而言之;(即使在Windows上):

ssh-keygen -R bitbucket.org && curl https://bitbucket.org/site/ssh >> ~/.ssh/known_hosts

注意:在六月之前,https://bitbucket.org/site/ssh 的内容仍然是旧的密钥。
这将把来自Bitbucket的新官方密钥添加到你的~/.ssh/known_hosts中。

bitbucket.org ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDQeJzhupRu0u0cdegZIa8e86EG2qOCsIsD1Xw0xSeiPDlCr7kq97NLmMbpKTX6Esc30NuoqEEHCuc7yWtwp8dI76EEEB1VqY9QJq6vk+aySyboD5QF61I/1WeTwu+deCbgKMGbUijeXhtfbxSxm6JwGrXrhBdofTsbKRUsrN1WoNgUa8uqN1Vx6WAJw1JHPhglEGGHea6QICwJOAr/6mrui/oB7pkaWKHj3z7d1IC4KWLtY47elvjbaTlkN04Kc/5LFEirorGYVbt15kAUlqGM65pk6ZBxtaO3+30LVlORZkxOh+LKL/BvbZ/iRNhItLqNyieoQj/uh/7Iv4uyH/cV/0b4WDSd3DptigWq84lJubb9t/DnZlrJazxyDCulTmKdOR7vs9gMTo+uoIrPSb8ScTtvw65+odKAlBj59dhnVp9zd7QUojOpXlL62Aw56U4oO+FALuevvMjiWeavKhJqlR7i5n9srYcrNV7ttmDw7kf/97P5zauIhxcjX+xHv4M=

bitbucket.org ssh-dss AAAAB3NzaC1kc3MAAACBAO53E7Kcxeak0luot3Z5ulOQJoLRBcnBQb0gpUfNL5rZW63fBubfXLbpZc2/GnHxRiFa2okTPvBULJZnjwXltyoRfjPICRLfH/ep3mZj6CVUyQgxES27CS1bEjMw8+S6hLlJF4dKqOIWH5+Ed+lo8ezzXbzcEj7R5h9xGgfY55HfAAAAFQDE/aqj+0sxv/ZRS3ArGxMHGYFebwAAAIEA6lZ68WgDMrR28iXIicJ7AnXPnZKzQK7xK68feKlYo9LcEkKTF3AZIE5nEvtn+ZYwZ5cKE3XKeU42aesAEAUxX9cUEzhi87q6PQagD6ZPcU89CCVlWsG8cKYCZ6VtMfcLU06grNfvl450KCHltWTaoBHdi9f8eFo3Gydg6JhyNJ8AAACAThcLJmru5QtpHo9wctg5jHKxv1BLPndKs3dVwAQwcd2sugoymGeH7IjBSFLqHsyl7XpDik4mH/YdkVwb1jAwA+JOu2gHpsSXLY22At+LKn6NHdL/qqbIf7ellnKXfEo+wz6DfGihaczY931WrjkEEsq1453/4BwQpAXrz2zbRSI=

bitbucket.org ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBPIQmuzMBuKdWeF4+a2sjSSpBK0iqitSQ+5BM9KhpexuGt20JpTVM7u5BDZngncgrqDMbWdxMWWOGtZ9UgbqgZE=
bitbucket.org ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIIazEu89wgQZ4bqs3d63QSMzYVa0MuJ2e2gKTKqu+UUO
我们最近得知,Bitbucket的SSH主机密钥的加密副本被第三方凭证管理供应商的数据泄露所包含。
SSH协议使用主机密钥来建立每个SSH连接的受信任服务器的身份,就像git pull建立与Bitbucket Cloud的SSH连接时一样。
尽管我们认为妥协的风险很低,但通过主动轮换主机密钥,我们正在减轻未来风险,以防旧的主机密钥被解密。
如果我们不更改主机密钥,将来可能有可能利用已经受到威胁的网络与旧的主机密钥结合起来,欺骗客户端连接和信任恶意主机。

Čamo在评论中指出,如果您仍然遇到以下错误:

警告:'bitbucket.org'的ECDSA主机密钥与IP地址'104.192.141.1'的密钥不同

那么您可以像此帖子中所述进行操作:

我们不得不在指南中提供的curl命令的末尾添加一个换行符。
您收到的警告消息可能与您的known_hosts文件中的旧条目有关,这些条目指向Bitbucket IP而不是域名bitbucket.org。
要解决此问题,您可以使用以下命令删除旧条目并存储新条目:
ssh-keygen -R bitbucket.org && sed -i.old -e '/AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/d' ~/.ssh/known_hosts && curl https://bitbucket.org/site/ssh >> ~/.ssh/known_hosts

只是给Windows用户的一则提示。我必须将密钥放在这里:C:\Windows\System32\config\systemprofile\.ssh\known_hosts - Andy
@Andy 只有在使用管理员帐户时才能执行此操作,详见此处$HOME 被设置为 %USERPROFILE%,因此请确保使用普通账户。 - VonC
我按照文档上的所有步骤进行了操作,但是出现了一个错误: 警告:'bitbucket.org' 的 ECDSA 主机密钥与 IP 地址 '104.192.141.1' 的密钥不一致。 - Čamo
@Čamo 确保你已经运行了 ssh-keygen -R bitbucket.org 命令,并且在 ~/.ssh/known_hosts 文件中没有任何关于 bitbucket 的引用:打开文件并检查。然后添加新的密钥。 - VonC
我在这里找到了解决方案:https://community.atlassian.com/t5/Bitbucket-questions/known-hosts-messed-up-after-ssh-host-key-changes-instructions/qaq-p/2362136?anon_like=2362136#U2429529 - Čamo
1
@Čamo 谢谢你的反馈。我已经编辑了答案,包括了你的评论。如果我从你提到的帖子中复制了正确的解决方案,请告诉我。 - VonC

32
mkdir ~/.ssh
touch ~/.ssh/known_hosts
ssh-keyscan bitbucket.org >> ~/.ssh/known_hosts

3
如果DNS已经被欺骗,那么这将无法保护您免受任何威胁。 - Jakuje
2
如果>>已经创建了文件,为什么还需要使用touch命令呢? - Andre Miras

7
只需要运行以下命令,无需任何附加内容。
ssh-keygen -R bitbucket.org

7

您将会得到同样的错误:

Host key verification failed.

如果您按下回车键而不是回答问题:
Are you sure you want to continue connecting (yes/no/[fingerprint])? 

使用yes


4
以下步骤对我个人有效,我事先在 BitBucket 上注册了 SSH 密钥。在 Windows 上:
  1. 转到 C:/Users/<your_username>/.ssh/known_hosts
  2. 删除以 bitbucket.org 开头的行
  3. 运行 ssh bitbucket.org 并按照说明操作

简单如此,这就是我在Windows 10上所需要的。也许我在之前的回答中错过了,但这里简单地在步骤2中说明了要删除什么。 - Stefan

1
  • 如果~/.ssh目录下不存在known_hosts文件,则创建一个。

  • 将以下内容复制到该文件中即可。

    bitbucket.org,104.192.143.1 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAubiN81eDcafrgMeLzaFPsw2kNvEcqTKl/VqLat/MaB33pZy0y3rJZtnqwR2qOOvbwKZYKiEO1O6VqNEBxKvJJelCq0dTXWT5pbO2gDXC6h6QDXCaHo6pOHGPUy+YBaGQRGuSusMEASYiWunYN0vCAI8QaXnWMXNMdFP3jHAJH0eDsoiGnLPBlBp4TNm6rYI74nMzgz3B9IikW4WVK+dc8KZJZWYjAuORU3jc1c/NPskD2ASinf8v3xnfXeukU0sJ5N6m5E8VLjObPEO+mN2t/FZTMZLiFqPWc/ALSqnMnnhwrNi2rbfg/rd/IpL8Le3pSBne8+seeFVBoGqzHM9yXw==


4
将来自随机网站的随机密钥粘贴是被欺骗的好方法。 - Jakuje
这不是来自随意的网站,而是来自Bitbucket。应该添加一个链接。 - Som Shekhar Mukherjee
3
现在,它是一个随机的网站(stackoverflow)。如果有指向Bitbucket的链接,那就更好了,但它与我5年前写的完全相同。 - Jakuje

1
如前所述,问题在于.ssh/known_hosts文件中不包含更新后的指纹。Atlassian给我发了很多邮件,但是在指纹切换之前,我还是忘记了一些地方需要升级。
我的基本解决方案是在你备份文件之后,直接从bitbucket本身添加新的指纹(curl https://bitbucket.org/site/ssh)。最后一个命令只是一个检查。
cp ~/.ssh/known_hosts ~/.ssh/known_hosts.old
curl https://bitbucket.org/site/ssh >> ~/.ssh/known_hosts
ssh git@bitbucket.org host_key_info

0

我在使用SourceTree时遇到了问题,因为我使用的是openSSH,但Putty / Plink已经设置好了。


0
在 macOS 上,按照这里的所有步骤后,我遇到了这个错误。
原来 Bitbucket 的密钥(包括 .pub 文件)是在 home(~)目录中生成的,并且在 ~/.ssh/config 文件中(其中 .ssh 文件夹和 config 文件都是我自己创建的),我们必须提供该密钥的路径。 因此,对我来说,它看起来像是:
Host bitbucket.org
  AddKeysToAgent yes
  IdentityFile ~/ssh-key-name

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接