git升级之后,pull、push远程库权限校验出错--fatal: Could not read from remote repository.
1.报错
Unable to negotiate with 192.168.129.190 port 29418: no matching host key type found. Their offer: ssh-rsa,ssh-dss
2.背景
git做了升级,从2.33.0 版本到2.35.1 版本
3.解决过程
一开始我以为ssh公钥过期了,于是重新生成公钥,并加到git服务器上,然而依旧是报同样的错误,我有多试了几次结果一样,所以公钥密钥是没问题的
于是我怀疑是升级的版本跟之前的密钥验证有变动,错误信息翻译:未匹配主机密钥类型,应该是加密算法的支持问题
一通百度,好多说要在ssh的config下加上,但报了另一个错误Permission denied
Host ssh_server
HostKeyAlgorithms +ssh-dss
看到一篇博客说ssh/config下的配置不生效,要去git安装目录下的etc/ssh/ssh_confg下配置才有用,按照里面原有的配置复制一份改为自己git的ip地址就真的生效了
但是,事实上经过测试在~/ssh/config是会生效的,问题只是在于少了一项配置PubkeyAcceptedAlgorithms +ssh-rsa ,在openssh 的更新日志也有给出兼容方法
最终:
HOST yourIp
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
4.原因
git for window 2.33.1 及其之后的版本使用了OpenSSH8.8
2021年09月26日发布的OpenSSH 8.8 中移除了对RSA-SHA1的支持,在其更新日志中有提到这个不兼容更新,大体意思就是1. SHA-1哈希算法默认禁用,2.用户可以自启用SHA-1算法
5.另一种解决方法
既然是SHA-1加密不支持,那么解决方案除了启用这个加密算法,还有一个方式就是使用别的算法来生成密钥,当然需要去git服务器上重新添加公钥
ssh-keygen -t ed25519 -C "注释信息(一般是邮箱)" # ED25519 加密方式
6.参考
Gitee的帮助文档关于SSH失效
OpenSSH更新日志
|