ArgoCD拉取Bitbucket私有仓库失败:SSH握手密钥不匹配
解决ArgoCD因Bitbucket SSH密钥更新导致的仓库拉取失败问题
问题背景
- 2023年5月15日,bitbucket.org为Bitbucket云主机新增了ecdsa和ed25519类型的SSH密钥
- 此后ArgoCD无法拉取私有仓库,所有应用状态变为Unknown
- 仓库服务器Pod报错:
ssh: handshake failed: knownhosts: key mismatch
原因分析
ArgoCD的SSH known_hosts配置中存储的Bitbucket主机密钥未同步更新,与Bitbucket云新部署的密钥不匹配,导致SSH握手阶段的主机身份验证失败。
解决方案
方法1:手动更新known_hosts配置
获取Bitbucket最新的全量SSH主机密钥:
ssh-keyscan bitbucket.org该命令会返回包含rsa、ecdsa、ed25519等所有类型的主机密钥。
定位ArgoCD存储known_hosts的配置对象:
- 大部分部署中,该信息存储在名为
argocd-ssh-known-hosts-cm的ConfigMap中;若使用Secret存储,则对应名称通常为argocd-ssh-known-hosts。
- 大部分部署中,该信息存储在名为
更新配置中的bitbucket.org条目:
将步骤1获取的新密钥替换掉原有旧的bitbucket.org密钥内容,保存配置后,ArgoCD repo-server会自动加载新配置(或手动重启repo-server Pod生效)。
方法2:重新添加仓库触发密钥更新
- 通过ArgoCD UI:进入「Settings」→「Repositories」,删除原有Bitbucket仓库后重新添加,添加过程中系统会自动获取并存储最新的主机密钥。
- 通过ArgoCD CLI:
# 先删除旧仓库(可选) argocd repo rm git@bitbucket.org:<你的用户名>/<你的仓库>.git # 重新添加仓库 argocd repo add git@bitbucket.org:<你的用户名>/<你的仓库>.git --ssh-private-key-path <本地私钥路径>
方法3:临时禁用严格主机密钥检查(应急方案,不推荐)
若需快速恢复服务,可临时关闭SSH严格主机验证(存在安全风险,仅作临时使用):
- 修改ArgoCD repo-server的SSH配置,添加
StrictHostKeyChecking no到~/.ssh/config或全局SSH配置中; - 重启repo-server Pod后生效,后续必须尽快更新正确的主机密钥。
验证操作
更新配置后,执行以下操作确认修复:
- 重启ArgoCD repo-server Pod:
kubectl rollout restart deployment argocd-repo-server -n argocd - 查看应用状态,确认从Unknown恢复为正常状态;
- 检查repo-server Pod日志,确认不再出现
ssh: handshake failed: knownhosts: key mismatch报错。
内容的提问来源于stack exchange,提问作者12345ieee
相关产品推荐
相关产品推荐

