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

Git为何使用错误SSH密钥?Ubuntu环境指定密钥方案咨询

解决Git优先使用登录转发密钥而非本地SSH密钥的问题

我懂你的情况——通过PuTTY搭配Pageant用my-key登录Ubuntu服务器后,拉取Git仓库代码时,Git居然自动用了登录用的my-key,而不是你存在Ubuntu用户~/.ssh目录里的coders-key对吧?这本质是SSH Agent转发在搞鬼:PuTTY默认开启了Agent转发,导致Ubuntu上的SSH会优先使用本地Pageant里的密钥,而不是服务器本地的密钥。

下面给你几个实用的解决办法,按需选择:

方法1:临时给单个Git仓库指定密钥

如果只是临时操作某个仓库,直接在Git命令里指定SSH密钥即可:

# 克隆仓库时指定密钥
GIT_SSH_COMMAND="ssh -i ~/.ssh/coders-key" git clone git@your-git-domain:your/repo.git

# 如果已经克隆过仓库,进入仓库目录后设置局部配置,后续操作自动用这个密钥
git config core.sshCommand "ssh -i ~/.ssh/coders-key"

方法2:配置SSH规则自动匹配仓库密钥(推荐)

如果多个仓库需要用不同密钥,最省心的方式是在Ubuntu上配置~/.ssh/config文件,让特定Git域名自动对应coders-key:

  1. 创建或编辑~/.ssh/config文件:
nano ~/.ssh/config
  1. 添加以下规则(替换成你的Git服务器域名和密钥路径):
Host your-git-domain
  IdentityFile ~/.ssh/coders-key
  IdentitiesOnly yes
  • Host填写你的Git仓库所在域名(比如github.com或者公司内部的Git域名)
  • IdentitiesOnly yes是关键:它强制SSH只使用你指定的这个密钥,不会去尝试其他密钥(包括转发过来的my-key)
  1. 给配置文件设置正确权限(SSH对权限要求很严):
chmod 600 ~/.ssh/config

之后访问这个域名的Git仓库,SSH就会自动用coders-key了。

方法3:关闭PuTTY的Agent转发(仅适合不需要转发的场景)

如果你完全不需要在Ubuntu上使用本地Pageant里的其他密钥,可以直接关闭PuTTY的Agent转发功能:

  1. 打开PuTTY,找到你保存的Ubuntu会话
  2. 左侧导航到Connection > SSH > Auth
  3. 取消勾选Allow agent forwarding选项
  4. 保存会话后重新登录Ubuntu
    这样登录后,Ubuntu上的SSH只能使用本地的密钥,Git自然会优先用coders-key。但这个方法会切断本地Pageant密钥的转发,如果你需要在Ubuntu上用其他本地密钥访问服务,就不适用了。

方法4:在Ubuntu上启动本地SSH Agent并添加密钥

如果想同时保留Agent转发和本地密钥优先级,可以在Ubuntu上启动自己的SSH Agent,把coders-key加进去:

  1. 登录Ubuntu后,启动本地Agent:
eval "$(ssh-agent -s)"
  1. 将coders-key添加到本地Agent:
ssh-add ~/.ssh/coders-key
  1. 之后Git操作会优先使用本地Agent里的密钥。如果想每次登录自动执行这两步,把上面两行添加到~/.bashrc(或~/.zshrc,如果你用zsh)文件末尾即可。

最后注意事项

确保coders-key的文件权限正确,否则SSH会拒绝使用:

chmod 600 ~/.ssh/coders-key

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:21:15