git-2_34_1访问服务器报Permission-denied(publickey)

起因

近期 git 更新了最新的 2.34.1 版本,好多小伙伴突然发现无法访问服务器。

git pull 的时候命令行会提示

 git@git.xxxxx.com:  Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).

莫名的提示,我还以为 git 版本有问题。

注意:Mac​ 更新到 Ventura13.0​ 也会有此问题。因为 git​ 随着系统升级到了 2.32.1​ 。

➜  .ssh cd ~/
➜  ~
➜  ~ git --version
git version 2.32.1 (Apple Git-133)

原因

GIT 2.33.1 版本集成了最新的 OpenSSH v8.8p1 版本,此版本放弃了历史相当悠久的 rsa-sha1 的支持。 当我们习惯于用命令行

 ssh-keygen -t rsa -C "your_email@example.com"

来创建密钥的时候,要小心了,以后不再支持。

SHA-1 哈希算法,此前被发现构造前缀碰撞攻击成本已降至低于 5 万美元(实际为 4.5 万美元),因此 OpenSSH 开发团队决定从 8.2 版本禁用 ssh-rsa 公钥签名算法。有一些更好的算法可以替代,包括 RFC8332 RSA SHA-2 签名算法 rsa-sha2-256/512、ssh-ed25519 签名算法与 RFC5656 ECDSA 算法。目前这些算法在 OpenSSH 中都已经支持。

值得注意的是,一般情况下,如果服务器 OpenSSH 版本大于等于 7.2 ,那么已经支持 ssh-rsa2-256/512 ,用户无需做额外的处理。但是如果服务器版本仍然比较低,就需要更换密钥。

解决方法

方法 1

如果你急需访问仓库,而暂时不想修改密钥,可以 在密钥所在的 .ssh 目录下的 config 文件(没有的话自行创建)添加如下配置即可访问。

 Host git.xxx.com
 HostkeyAlgorithms +ssh-rsa 
 PubkeyAcceptedAlgorithms +ssh-rsa

修改后的配置

 Host git.xxx.com
   PreferredAuthentications publickey
   IdentityFile ~/.ssh/id_rsa_mac
   HostkeyAlgorithms +ssh-rsa
   PubkeyAcceptedAlgorithms +ssh-rsa

方法 2

重新生成更安全的密钥。 在生成之前,要确定服务器是否支持相应的密钥加密算法。 使用 ECDSA 或者 ED25519 算法替代 RSA 以一个不错的选择

 ssh-keygen -t ed25519 -C "your@example.email"

参考文章

https://confluence.atlassian.com/bitbucketserverkb/ssh-rsa-key-rejected-with-message-no-mutual-signature-algorithm-1026057701.html

https://git-scm.com/docs/gitfaq#_credentials

方法 3

回滚 git 到 2.32 版本。

文章更新历史
2022-08-30 feat:初稿。

2022-10-26 feat:新增Mac更新场景。

posted @ 2022-10-26 12:52  灯塔下的守望者  阅读(88)  评论(0编辑  收藏  举报