按目录分离gitconfig配置后个人Github仓库SSH认证失败如何解决
问题根因
- SSH默认仅会自动读取
id_rsa、id_ed25519等默认命名的密钥,你自定义命名的id_perso、id_work不会被自动识别匹配 - 手动执行
ssh-add添加的密钥会在ssh-agent重启(比如终端重启、系统重启)后失效,你执行ssh-add -l返回无身份凭证就属于这个情况 - 你没有配置SSH规则区分访问GitHub不同账号时使用的对应密钥
解决方案步骤
1. 编写SSH配置文件
创建/编辑~/.ssh/config文件,添加如下内容:
# 个人GitHub账号配置 Host github-perso HostName github.com User git IdentityFile ~/.ssh/id_perso IdentitiesOnly yes # 工作GitHub账号配置 Host github-work HostName github.com User git IdentityFile ~/.ssh/id_work IdentitiesOnly yes
配置说明:IdentitiesOnly yes 强制SSH仅使用指定的密钥认证,避免多个密钥冲突。
2. 修正个人仓库的远程地址
进入个人仓库目录,执行命令修改remote地址,关联到个人的SSH配置别名:
git remote set-url origin git@github-perso:Pierre-Alexandre35/pierre-alexandre.io.git
如果是后续新克隆个人仓库,直接使用对应别名格式的地址即可,比如git clone git@github-perso:你的用户名/仓库名.git,工作仓库则用git@github-work:工作用户名/仓库名.git。
3. 持久化添加密钥到ssh-agent
MacOS环境下执行如下命令,将密钥添加到系统钥匙串,重启后不会丢失:
ssh-add --apple-use-keychain ~/.ssh/id_work ~/.ssh/id_perso
执行完成后运行ssh-add -l,可以看到两个密钥的指纹信息即表示添加成功。
4. 修正Git配置路径问题
你当前的全局~/.gitconfig中工作目录的匹配规则是gitdir:~/Documents/servier/,但你实际的工作目录是/Users/pierre-alexandre/Documents/work,需要把路径修改为你实际的工作目录路径,否则工作目录的Git用户配置可能加载失败。
5. 测试连通性
分别执行两个测试命令验证认证:
# 测试个人账号认证 ssh -T git@github-perso # 测试工作账号认证 ssh -T git@github-work
正常会返回对应账号的认证成功提示,之后即可正常在两个目录下执行Git的push、pull操作。
内容的提问来源于stack exchange,提问作者Pierre-Alexandre
相关产品推荐
相关产品推荐

