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

SSH与GitHub如何识别用户名?多密钥配置后身份异常排查

问题描述

我创建了两个SSH密钥:~/.ssh/id_ed25519和~/.ssh/dr_dror_id_ed25519,并将它们的公钥分别上传至两个不同的GitHub账号(个人和工作账号)。随后我配置了~/.ssh/config文件,内容如下:

Host drorata-personal
  Hostname github.com
  User git
  IdentityFile ~/.ssh/id_ed25519

Host dr-dror
  Hostname github.com
  User git
  IdentityFile ~/.ssh/dr_dror_id_ed25519

但无论执行ssh -T git@drorata-personal还是ssh -T git@dr-dror,得到的响应均为:

Hi drorata! You've successfully authenticated, but GitHub does not provide shell access.

请问drorata这个用户名来自哪里?我猜测是个人账号的用户名,问题出在哪里?

问题分析与解决

drorata确实是你个人GitHub账号的用户名,问题核心是SSH始终使用个人账号的密钥(id_ed25519)完成认证,而非配置文件中指定的对应密钥,具体原因和解决方法如下:

1. SSH代理缓存了已加载的密钥

SSH会将已加载的密钥缓存到本地代理中,后续连接时会优先尝试缓存内的密钥,忽略配置文件指定的IdentityFile。

  • 解决:清空代理缓存,执行命令:
    ssh-add -D
    
  • 若需要后续自动加载对应密钥,可手动添加(可选):
    ssh-add ~/.ssh/id_ed25519
    ssh-add ~/.ssh/dr_dror_id_ed25519
    

2. 检查config文件的权限与优先级

  • SSH要求~/.ssh/config的权限必须为600(仅当前用户可读可写),否则会直接忽略该文件。执行命令修正权限:
    chmod 600 ~/.ssh/config
    
  • 若config文件中有通配符规则(比如Host *),需确保你的自定义Host规则(drorata-personal、dr-dror)排在通配符规则前面,否则会被覆盖。

3. 验证连接时的密钥使用情况

用verbose模式查看SSH连接的详细日志,确认到底使用了哪个密钥:

ssh -vT git@dr-dror

在输出中查找debug1: Offering public key:的行,该行会显示当前使用的密钥文件路径,以此确认是否用错了密钥。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 06:42:09