读取id_rsa文件、推送Git代码报权限拒绝错误如何排查解决
问题原因
两个报错直接关联,核心问题集中在SSH密钥的权限、配置两个层面:
- 执行
cat id_rsa报Permission denied,要么是你没切到~/.ssh目录、在其他无该文件的路径下直接执行命令,要么是id_rsa私钥的属主、权限配置不符合要求,当前系统用户没有读取权限。 - GitHub推送报publickey权限拒绝,本质是SSH握手阶段客户端拿不到合法私钥和GitHub侧存储的公钥匹配:要么是私钥因为权限问题被SSH客户端判定为不安全拒绝加载,要么是你没把对应公钥绑定到GitHub账号,要么是本地ssh-agent没加载私钥导致握手时未发送有效凭证。
修复步骤
按顺序操作即可,不需要多余配置:
- 先进入SSH默认工作目录,修正密钥权限。SSH客户端对私钥权限有强制校验,只要私钥给组、其他用户留了读权限,会直接判定为不安全拒绝加载:
cd ~/.ssh # 私钥配置为仅当前用户可读写 chmod 600 id_rsa # 公钥可公开读,权限要求宽松 chmod 644 id_rsa.pub
如果执行chmod时提示权限不足,先切root修改文件属主再调整权限,把命令里的your_username换成你当前登录系统的用户名即可:
sudo chown your_username:your_username id_rsa id_rsa.pub
- 验证私钥可读性,执行
cat id_rsa,正常输出以-----BEGIN OPENSSH PRIVATE KEY-----开头、-----END OPENSSH PRIVATE KEY-----结尾的内容就说明权限正常。如果还是报错,说明本地根本没有生成过SSH密钥对,直接执行ssh-keygen -t ed25519 -C "你的GitHub绑定邮箱"一路回车生成新的密钥对即可。 - 把私钥加载到本地ssh-agent,避免SSH握手时找不到对应密钥:
# 启动ssh-agent并加载环境变量 eval "$(ssh-agent -s)" # 添加私钥到agent,生成密钥时设置了密码的话这里要输对对应密码 ssh-add ~/.ssh/id_rsa
- 绑定公钥到GitHub账号:执行
cat ~/.ssh/id_rsa.pub,把输出的整行公钥完整复制,打开GitHub个人设置的「SSH and GPG keys」页面,新建SSH密钥,把复制的公钥粘贴进去保存。 - 连通性校验:执行
ssh -T git@github.com,返回Hi 你的GitHub用户名! You've successfully authenticated, but GitHub does not provide shell access.就说明配置全部生效,后续推送拉取代码都不会再报权限错误。
注意:id_rsa是你的私钥文件,绝对不要把内容泄露给其他人,持有私钥就可以完全操作你绑定的GitHub账号,不要随便贴到公开渠道。
内容的提问来源于stack exchange,提问作者TheParrot12345
相关产品推荐
相关产品推荐

