昨天测试一个国产基于centos 8.4的操作系统,拉一个gerrit上的git项目,无论如何都报no access right错误,经检查publickey添加没有问题,联系了下负责人,初步判断是ssh协议的问题,但是一时找不到解决的方向。

看了下手册,开启调试模式,查看 git clone的ssh协商过程,命令如下
GIT_SSH_COMMAND="ssh -vvvv" git clone NAME_OF_REPOSITORY

看到了如下报错信息,
debug1: send_pubkey_test: no mutual signature algorithm
debug1: No more authentication methods to try.
user@hostname: Permission denied (publickey).

原因是openssh觉得ssh-rsa加密方式不安全, 直接从8.8开始默认不允许这种密钥用于登陆了(参考:https://www.openssh.com/releasenotes.html)

解决方法很简单,在~/.ssh/config里添加下面三行即可
Host *
PubkeyAcceptedKeyTypes +ssh-rsa
HostKeyAlgorithms +ssh-rsa
KexAlgorithms +diffie-hellman-group1-sha1

第一行说明对所有主机生效, 第二行是将ssh-rsa加入允许使用的范围, 第三行是指定所有主机使用的都是ssh-rsa算法的key.

原因很简单,解决起来需要对SSH协议比较熟悉才能找到问题根源,另外修改/etc/ssh/下配置文件无效,需要修改~/.ssh/config这个文件,这个文件才是git clone读取的配置文件
 
 
Back to Top