目录
[隐藏]
1 问题描述
在将 Macbook 系统升级至 13.5 版本后,git pull -r
拉取代码报错如下:
sign_and_send_pubkey: no mutual signature supported Permission denied (publickey). fatal: Could not read from remote repository.
2 原因分析
openssh 8.2
版本后默认禁用 ssh-rsa
算法,因为该算法存在安全隐患,参考:OpenSSH to deprecate SHA-1 logins due to security risk
对于 ssh 登录,更为推荐的是改用 Ed25519
算法。于是有两种解决办法:手动启用 ssh-rsa
或改用生成 Ed25519
算法的 key。
3 解决办法
3.1 解决方案一:手动启用 ssh-rsa
算法
执行如下代码,创建 ~/.ssh/config
文件即可:
ls ~/.ssh echo "PubkeyAcceptedKeyTypes +ssh-rsa" > ~/.ssh/config
PubkeyAcceptedKeyTypes +ssh-rsa
是一个 OpenSSH 密钥验证策略,它表示服务器接受以 ssh-rsa
格式签名的公钥进行身份验证。这个策略只适用于 OpenSSH 服务器。
3.2 解决方案二:重新生成 Ed25519
算法的 key
以下以 macOS 为例,执行如下命令生成 ed25519
算法的公钥与私钥,然后将复制的公钥配置到 git 代码平台即可。
# 生成 ed25519 算法的公钥与私钥 ssh-keygen -t ed25519 -C "your_email@example.com" # 复制公钥到剪切板(macOS) cat ~/.ssh/github_ed25519.pub | pbcopy
3.3 附:为特定站点设置独立的 ssh 配置
ssh-keygen
可以指定 -f
参数自定义生成 key 的名称。示例:
ssh-keygen -t ed25519 -C "your_email@example.com" -f github_ed25519
然后编辑 ~/.ssh/config
文件,并在其中配置特定站点使用指定的 key 文件即可。示例:
vi ~/.ssh/config
参考添加如下配置(针对 github 站点):
Host github Hostname github.com # ProxyCommand connect -H localhost:1080 %h %p User git PreferredAuthentications publickey IdentityFile ~/.ssh/github_ed25519