最根本的解决方式是升级 git 和 openssh:git 低于2.10可能不支持ed25519,openssh 6.5+才引入该算法,8.8+则默认禁用ssh-rsa,需改用ed25519密钥或配置兼容参数。

直接升级 Git 和 OpenSSH 是最根本的解决方式。旧版 Git(尤其是低于 2.10 的版本)可能不支持 ed25519 密钥格式,或无法正确协商现代签名算法,导致连接时出现 Permission denied (publickey) 或 No mutual signature algorithm 等错误。
确认当前 Git 和 OpenSSH 版本
先查清问题根源:
- 运行
git --version—— 若低于 2.10,建议升级;2.17+ 对 ed25519 支持更稳定 - 运行
ssh -V—— 若显示OpenSSH_7.4或更早,很可能不支持 ed25519(该算法自 OpenSSH 6.5 起引入,但完整支持需 7.0+) - 若显示
OpenSSH_8.8及以上,则默认已禁用ssh-rsa,此时必须使用 ed25519 或 ecdsa 等现代算法
生成并部署 ed25519 密钥对
即使 Git 较旧,只要 OpenSSH ≥ 6.5(绝大多数 macOS 10.12+/Linux 发行版/Windows 10 WSL 均满足),就能生成和使用 ed25519:
- 执行:
ssh-keygen -t ed25519 -C "your_email@example.com" - 接受默认路径(
~/.ssh/id_ed25519),可选设 passphrase 提升安全性 - 将公钥内容复制进 Git 托管平台(GitHub/GitLab/Gitee)的 SSH Keys 设置页
- 确保本地
~/.ssh/config中对应 Host 配置未强制指定PubkeyAcceptedAlgorithms或HostKeyAlgorithms为过时值
临时兼容方案(仅限无法升级环境)
若因系统限制无法升级 Git 或 OpenSSH(如老旧 CI 服务器、嵌入式环境),可启用向后兼容选项:
- 在
~/.ssh/config中为对应主机添加:
Host github.com
PubkeyAcceptedAlgorithms +ssh-rsa
HostKeyAlgorithms +ssh-rsa
- 注意:此操作会重新启用已被弃用的 RSA-SHA1,仅作过渡,不推荐长期使用
- 部分新版 OpenSSH(≥9.0)已完全移除 ssh-rsa 支持,此时该配置无效,必须升级或换算法
验证与调试连接
避免凭经验猜测,用标准命令定位真实瓶颈:
- 测试密钥是否被识别:
ssh -T -v git@github.com(观察日志中debug1: Offering public key后是否出现send_pubkey_test成功或失败提示) - 检查是否加载了正确的私钥:
ssh-add -l,若无输出,运行ssh-add ~/.ssh/id_ed25519 - 确认 Git 使用的是系统 SSH(而非内嵌旧版):
git config --global core.sshCommand "ssh"











