问题描述
Mac升级系统到macOS Ventura,系统升级完毕后发现git拉取代码需要输入密码,输入完正确密码后就会报Permission denied的错误,如下图所示:
输入正确密码仍然无法正常访问仓库。
问题分析
从上图可以看到,报错信息为Permission denied,分析原因就是ssh的密钥错误了,密钥没有调整变更,为什么密钥会错误了呢,首先采取了比较粗暴的方法,移除原密钥,重新生成密钥,操作如下:
ssh-keygen -t rsa -C "xxx@xxx"//邮箱信息
生产私钥与公钥后将公钥配置到仓库中(在此就不做过多赘述了,不了解者可自行查询)
配置完成后重新运行还是报错。
还是有问题,难道是macOS做什么调整了?
通过查证发现,macOs Ventura内置使用了OpenSSH_9.0p1,通过OpenSSH Release Note可以了解到, 从OpenSSH 8.8/8.8p1版本开始,ssh-rsa算法默认是关闭的了,有兴趣的可以查看release-8.8版本说明。
解决办法
方法一:
在release-8.8版本中给出了兼容的解决方案,若要使用ssh-rsa算法时,可以对对应的host进行配置,方式如下:
Host old-host
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
对于我们git不可用的问题,可以修改~/.ssh/config文件的配置信息,在文件中添加如下信息:
Host *
HostkeyAlgorithms +ssh-rsa
PubkeyAcceptedAlgorithms +ssh-rsa
这样通过命令行ssh-keygen -t rsa -C "xxx@xxx"生产的密钥就可正常使用了。
方法二:
由于我们的密钥是通过rsa算法生产的,系统关闭rsa算法这扇门,肯定还会给我们开另外一扇窗,例如说明中描述的,信息如下所示:
We recommend enabling RSA/SHA1 only as a stopgap measure until legacy
implementations can be upgraded or reconfigured with another key type
(such as ECDSA or Ed25519).
可以使用Ed25519算法来代替,通过Ed25519算法生成密钥,然后配置到服务器中,生产密钥命令如下所示:
ssh-keygen -t ed25519