You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Git使用ed25519算法SSH密钥pull/push时每次均要求输入密码

问题描述
  • 对接GitHub、GitLab平台时,使用ed25519算法生成的SSH密钥执行git pull、git push操作,每次都会被要求输入密码,无法完成免密身份校验
  • 切换为rsa算法生成的SSH密钥后,所有Git操作均可正常执行,无需额外输入密码或完成其他验证,两个平台测试结果完全一致
  • 在~/.ssh目录下编写config文件单独指定ed25519密钥路径时,执行ssh -T git@github.com仍提示需要输入密码;将config配置修改为指定rsa密钥路径后,执行同一条命令可直接通过身份验证
  • 补充:config文件中排序靠前的密钥为ed25519类型,靠后的为rsa类型
解决方案

ed25519密钥无法免密验证是非常常见的配置问题,按以下步骤逐一排查即可解决:

  1. 检查ed25519私钥是否设置了口令且未加入ssh-agent缓存
    执行命令验证私钥状态:
    ssh-keygen -y -f ~/.ssh/你的ed25519私钥实际路径
    
    如果执行后直接输出以ssh-ed25519开头的公钥内容,说明私钥未设置口令;如果提示输入passphrase,说明生成密钥时设置了保护口令,且没有把密钥加入SSH代理的缓存,这是每次操作都要求输密码的最常见原因。
    修复方式:
    • 先启动SSH代理:eval "$(ssh-agent -s)"
    • 将ed25519私钥加入代理缓存:ssh-add ~/.ssh/你的ed25519私钥实际路径,按提示输入一次密钥口令后,后续所有操作都不会重复要求输入。
    • macOS用户可以执行ssh-add --apple-use-keychain ~/.ssh/你的ed25519私钥实际路径,将口令存入系统钥匙串,设备重启后也不需要重复加载密钥。
  2. 修正文件权限
    SSH对目录、配置文件、私钥的权限有严格要求,权限不符合规则时会直接忽略对应文件,导致密钥加载失败。执行以下命令修正权限:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/config
    chmod 600 ~/.ssh/id_ed25519 # 替换为你实际的ed25519私钥文件名
    chmod 644 ~/.ssh/id_ed25519.pub
    
  3. 修正config配置规则
    单独指定ed25519密钥的配置段必须添加IdentitiesOnly yes参数,否则SSH会默认优先尝试加载代理中缓存的其他密钥、默认路径下的其他密钥,导致密钥匹配失败回退到密码验证。正确配置参考:
    Host github.com
      HostName github.com
      User git
      IdentityFile ~/.ssh/id_ed25519
      IdentitiesOnly yes
    
    GitLab的配置只需要把Host、HostName替换为GitLab对应的域名即可。
  4. 校验平台侧上传的公钥正确性
    执行cat ~/.ssh/id_ed25519.pub查看本地ed25519公钥内容,和GitHub/GitLab SSH密钥设置页已上传的公钥逐字符比对,确认没有多复制空格、换行,也没有错将rsa公钥上传。ed25519公钥固定以ssh-ed25519 开头,rsa公钥固定以ssh-rsa 开头,可以靠这个前缀快速区分。
  5. 调试定位具体错误
    如果以上步骤操作完仍有问题,执行带调试参数的连接命令:
    ssh -vT git@github.com
    
    输出的调试日志会明确显示SSH尝试加载的密钥路径、认证阶段的返回结果,直接根据日志提示的错误点修复即可。

内容的提问来源于stack exchange,提问作者Nauxscript

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 14:27:18