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

GitHub与SSH密钥认证异常求助:跨主机认证不一致问题

问题分析与解决方案

为什么Mac删除GitHub密钥后仍能认证?

大概率是以下两种缓存机制在起作用:

  1. SSH代理(ssh-agent)缓存:Mac默认会启动ssh-agent并缓存密钥,即使GitHub后台删掉了对应公钥,本地缓存的私钥仍可能暂时通过认证。
  2. Mac Keychain集成:SSH在Mac上默认会把密钥存入Keychain,即便你删除了~/.ssh下的密钥文件,Keychain里的备份仍会被自动加载。

步骤1:清理Mac的残留认证缓存

  • 查看当前ssh-agent加载的密钥:
    ssh-add -l
    
    如果能看到旧密钥,清空所有缓存:
    ssh-add -D
    
  • 打开「钥匙串访问」应用,搜索"ssh"或"github",删除所有相关的SSH密钥条目,避免系统自动加载旧密钥。
  • 用 verbose 模式测试连接,确认不再使用旧密钥:
    ssh -vT git@github.com
    
    输出里会显示Trying private key: <路径>,确认没有加载已删除的密钥,认证成功后会显示你的GitHub用户名(不再是旧的mcdent/blog1)。

步骤2:配置统一的SSH密钥用于两台主机

生成密钥(任选一台主机操作)

推荐用更安全的ed25519算法生成密钥:

ssh-keygen -t ed25519 -C "your-github-email@example.com"

按提示一路回车(可设置密码,也可留空方便自动登录),生成的密钥文件在~/.ssh/id_ed25519(私钥)和~/.ssh/id_ed25519.pub(公钥)。

上传公钥到GitHub

打开~/.ssh/id_ed25519.pub,复制全部内容,进入GitHub「Settings -> SSH and GPG keys -> New SSH key」,粘贴内容并添加。

同步密钥到另一台主机

  • 从Mac到Linux:用scp复制私钥和公钥:
    scp ~/.ssh/id_ed25519 user@linux-host:~/.ssh/
    scp ~/.ssh/id_ed25519.pub user@linux-host:~/.ssh/
    
  • Linux上设置权限:SSH对密钥权限要求严格,必须执行:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/id_ed25519
    chmod 644 ~/.ssh/id_ed25519.pub
    

步骤3:验证两台主机的连接

分别在Mac和Linux上执行:

ssh -T git@github.com

正常情况下会返回Hi <你的GitHub用户名>! You've successfully authenticated, but GitHub does not provide shell access.,说明认证成功。

额外排查点(如果Linux仍报错)

  • 检查Linux的ssh-agent是否运行:eval "$(ssh-agent -s)",然后加载密钥:ssh-add ~/.ssh/id_ed25519
  • 查看Linux的SSH配置文件~/.ssh/config,如果有针对github.com的配置,确认没有指定错误的密钥路径:
    cat ~/.ssh/config
    
    若有多余配置,可以暂时注释或删除。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 23:01:03