git升级踩坑

问题

最近升级了一下 pycharm,重启提示 git 版本不受支持,然后就找了个最新版本的 git 升级
升级完之后,发现 git pull 报错,Permission denied (publickey).

排查

这个报错之前见过,没配 SSH key 就是这个报错
一开始以为是 git 升级完要重新配一下 SSH key,心想怎么这么不智能
重新生成完了,在 gerrit 上也重新 Add 新生成的 SSH key 了,报错还是一样,重新 git clone 也是一样的报错
眉头一皱,一搜,有大坑。

问题原因

GIT 2.33.1 版本集成了最新的 OpenSSH v8.8p1版本,此版本放弃了历史相当悠久的 rsa-sha1的支持。
2.33 以上的版本,如果再用 rsa 来生成 SSH Key,就会产生问题,需要更换密钥

解决方案

方案一

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

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

方案二

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

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

方案三

回滚 git 版本

方案四

windows 版本的 git 安装的时候,可以选择“use external OpenSSH”。这样可以不使用内置的 OpenSSH。可以指定一个可用的 OpenSSH 安装路径。
最终确认 gerrit 支持更安全的密钥算法,就用方案二解决了。