如何解决CentOS服务器拉取GitHub代码出现Permission denied (publickey)报错问题
问题原因
每次手动执行ssh-add ~/.ssh/id_rsa仅对当前登录会话的ssh-agent进程生效,登出后会话销毁,新登录会话的ssh-agent未自动加载对应私钥,因此会重复出现公钥认证报错。
解决方案
方案1:配置SSH配置文件指定认证密钥(最推荐)
该方案无需依赖ssh-agent,SSH连接时会自动使用指定的私钥认证,永久生效。
- 执行命令编辑SSH用户配置文件:
vim ~/.ssh/config - 追加如下配置:
Host github.com HostName github.com User git IdentityFile ~/.ssh/id_rsa IdentitiesOnly yes
- 保存退出后执行命令设置配置文件正确权限:
chmod 600 ~/.ssh/config
配置完成后即可直接连接GitHub,无需每次登录手动执行ssh-add。
方案2:配置Shell启动时自动加载私钥到ssh-agent
如果需要用ssh-agent管理多个密钥,可配置登录时自动完成私钥加载逻辑:
- 如果你使用Bash,编辑
~/.bashrc文件;如果使用Zsh,编辑~/.zshrc文件 - 在文件末尾追加如下内容:
# 自动加载SSH私钥到ssh-agent if [ -z "$SSH_AUTH_SOCK" ]; then eval $(ssh-agent -s) fi ssh-add ~/.ssh/id_rsa 2>/dev/null
- 保存退出后执行
source ~/.bashrc(或对应Shell的配置文件)立即生效,下次登录时会自动执行该逻辑加载私钥。
验证方法
配置完成后执行ssh -T git@github.com,如果返回Hi 你的GitHub用户名! You've successfully authenticated...的提示,说明配置生效。
注意事项
- 确保你的
~/.ssh/id_rsa.pub公钥内容已经正确添加到GitHub账号的SSH密钥设置中 - 私钥文件权限必须为600,可执行
chmod 600 ~/.ssh/id_rsa修正权限,权限过高会被SSH服务拒绝使用 - 如果你使用的私钥文件名不是默认的id_rsa,将上述配置中的路径替换为你实际的私钥文件路径即可
内容的提问来源于stack exchange,提问作者wowothk
相关产品推荐
相关产品推荐

