运行git push时出错,提示Permission denied (publickey)

本文转载自博客园博主“王老头”的文章《Permission denied(publickey). fatal: Could not read from remote repository.》

 

 

    错误:  在终端(terminal)下

                      执行git clone git@github.com:accountName/repository.git命令时不出错,

                      运行git push时出错,提示如下

                      Permission denied(publickey).

                      fatal: Could not read from remote repository.

                      Please make sure you have the correct access rights and the repository exists.

 

    原因:  可能是没有与github上的账号成功建立密钥对。

 

    解决: 

                  【1】ssh-keygen -t rsa -C "youremail@example.com"

                            注意,上述youremail@example.com是指github账户的注册邮箱

补充说明ssh-keygen命令用于为“ssh”生成、管理和转换认证密钥,它支持RSA和DSA两种认证密钥。本步骤使用ssh-keygen命令创建一个密钥,并指定密钥类型为rsa。在生成密钥前会先询问密钥存储路径和密码。CentOS 7系统下默认的密钥存储路径为<~/.ssh/id_rsa>,windows系统下默认的密钥存储路径为</c/Users/用户名/.ssh/id_rsa>。当然也可以自定义路径。在第【4】步中会用到密钥存储路径。

ssh-keygen生成密钥的命令(windows系统下运行的,仅为说明用。全文是基于CentOS 7下遇到和解决的问题)
图1. ssh-keygen生成密钥的命令(windows系统下运行的,仅为说明用。全文是基于CentOS 7下遇到和解决的问题)

 

                  【2】ssh -v git@github.com

                            上述命令执行后,出现的提示最后两句是

                                  No more authentication methods to try.

                                  Permission denied (publickey).

                  【3】ssh-agent  -s

                            上述命令执行后,出现的提示最后两句是

                                  SSH_AUTH_SOCK=/tmp/ssh-GTpABX1a05qH/agent.404; export SSH_AUTH_SOCK;

                                  SSH_AGENT_PID=13144; export SSH_AGENT_PID;

                                  echo Agent pid 13144;

                  【4】ssh-add ~/.ssh/id_rsa  

                            上述命令执行后,出现提示

                                  Identity added: . . . (这里是一些ssh key 文件路径)

                                  Could not open a connection to your authentication agent.

补充说明:ssh-add用于是把专用密钥添加到ssh-agent的高速缓存中。本文遇到和解决问题都是在CentOS 7系统下,所以本步骤中密钥存储位置为<~/.ssh/id_rsa>如果在第【1】步创建密钥时自定义了密钥存储路径,或默认路径不是<~/.ssh/id_rsa>,则应该作相应修改。

例如,图1所示windows系统下创建的密钥,存储在</c/Users/may/.ssh/id_rsa>,则此步骤中执行的命令应该相应改为ssh-add /c/Users/may/.ssh/id_rsa

在此,特别感谢优快云网友易水轻寒在本文评论中的指正。

 

                  【5】若【4】中出现上述提示,则执行此步骤,否则执行【6】

                           eval `ssh-agent  -s`       回车

                           ssh-add ~/.ssh/id_rsa        回车

                  【6】cat  ~/.ssh/id_rsa.pub   (也可以用其他方式打开)  

                            上述命令执行后id_rsa.pub文件内容将输出到终端,复制里面的密钥(内容一般是以ssh-rsa 开头,以github账号的注册邮箱结尾的,全部复制下来)

                  【7】进入github账号,在settings下,选SSH and GPG keys, 点击new SSH key

图2. 添加密钥

 

                           点击new SSH key后,在title栏里自定义名字,然后将上一步复制的密钥(以ssh-rsa 开头,以github账号的注册邮箱结尾的)粘贴到此处。

                           然后点击Add SSH Key

                  【8】ssh -T git@github.com      回车

                            提示: Hi ---! You've successfully authenticated, but GitHub does not provide shell access.

                        

 

<think>好的,我现在需要帮助用户解决Git配置遇到的“Permission denied (publickey)”错误。首先,我得回想一下这个问题的常见原因和解决方法。根据用户提供的引用内容,特别是引用[3]提到SSH_AUTH_SOCK环境变量的问题,还有其他引用提到的密钥生成和配置步骤。 首先,应该检查SSH密钥是否存在。用户可能没有生成正确的密钥,或者生成的密钥没有添加到ssh-agent中。引用[2]提到用户可能自定义了密钥文件名,导致Git无法自动识别。这候需要确认密钥是否在默认路径~/.ssh下,或者是否在配置中指定了正确的文件。 然后,确保公钥已经正确添加到Git服务器(如GitHub)的账户设置中。如果公钥未添加或添加错误,会导致权限被拒绝。引用[1]中的错误信息可能与此有关。 接下来,检查SSH代理是否运行,并且密钥是否被添加进去。如果ssh-agent没有运行,或者密钥未被添加,SSH连接无法使用对应的私钥进行认证。引用[3]提到SSH_AUTH_SOCK环境变量的问题,可能需要通过eval命令启动ssh-agent并添加密钥。 另外,需要验证SSH连接是否正常。使用ssh -T命令测试连接到Git服务器,可以查看详细的错误信息,帮助诊断问题。 可能还需要检查文件权限,确保.ssh目录和密钥文件的权限设置正确,过于开放的权限会导致SSH拒绝使用这些密钥。 用户可能的问题步骤包括:生成密钥使用了非默认名称,未正确配置SSH配置文件,或者未将密钥添加到代理。需要一步步引导用户检查这些方面。 总结下来,解决步骤应该是: 1. 检查密钥是否存在,位置是否正确。 2. 确认公钥已添加到Git服务器。 3. 启动ssh-agent并添加私钥。 4. 测试SSH连接。 5. 检查文件权限。 最后,生成相关问题,帮助用户深入了解相关配置和故障排除方法。</think>### 解决 Git "Permission denied (publickey)" 错误的逐步指南 #### 1. 验证 SSH 密钥是否存在 **操作步骤:** - 打开终端,输入命令查看密钥文件: ```bash ls -al ~/.ssh ``` - 检查是否存在 `id_rsa` 和 `id_rsa.pub`(或自定义名称如 `xxx.github`)文件。若不存在,需生成新密钥: ```bash ssh-keygen -t ed25519 -C "your_email@example.com" # 推荐使用ed25519算法 ``` - 提示保存路径,**建议使用默认路径**(直接回车)。若使用自定义路径(如 `xxx.github`),需额外配置(见步骤3)[^2]。 #### 2. 添加公钥到 Git 服务器 **操作步骤:** - 复制公钥内容(例如 `id_rsa.pub`): ```bash cat ~/.ssh/id_rsa.pub | pbcopy # Mac 直接复制到剪贴板 ``` - 登录 GitHub/GitLab,进入 `Settings -> SSH and GPG keys`,粘贴公钥并保存[^1]。 #### 3. 配置 SSH 客户端(自定义密钥路径必需) **操作步骤:** - 创建或修改 `~/.ssh/config` 文件: ```bash Host github.com HostName github.com User git IdentityFile ~/.ssh/xxx.github # 替换为你的自定义密钥路径 IdentitiesOnly yes ``` - 设置文件权限: ```bash chmod 600 ~/.ssh/config ``` #### 4. 启动 ssh-agent 并添加私钥 **操作步骤:** - 确保 ssh-agent 在后台运行: ```bash eval "$(ssh-agent -s)" # 输出应为 "Agent pid XXXX" ``` - 添加私钥到代理: ```bash ssh-add ~/.ssh/id_rsa # 或自定义密钥路径(如 ~/.ssh/xxx.github) ``` - 若提示 `Could not open a connection to your authentication agent`,说明 ssh-agent 未启动,需先执行上一步的 `eval` 命令[^3]。 #### 5. 测试 SSH 连接 **操作步骤:** - 执行连接测试命令: ```bash ssh -T git@github.com # GitHub 测试 ``` - 成功会显示: ```text Hi username! You've successfully authenticated... ``` - 若仍失败,尝试详细调试模式: ```bash ssh -vT git@github.com # 查看具体错误日志 ``` #### 6. 检查文件权限 **操作要求:** - `.ssh` 目录权限需为 `700`: ```bash chmod 700 ~/.ssh ``` - 私钥文件权限需为 `600`: ```bash chmod 600 ~/.ssh/id_rsa ``` --- ### 关键问题总结表 | 问题现象 | 解决方案 | |---------|----------| | 密钥文件路径错误 | 检查 `~/.ssh` 目录或通过 `ssh -vT` 查看日志 | | 公钥未正确添加 | 重新复制公钥内容到 Git 服务器 | | ssh-agent 未加载私钥 | 执行 `ssh-add` 并检查代理状态 | | 文件权限过大 | 使用 `chmod` 修正权限 | --- §§ 1. 如何为不同的 Git 仓库配置多个 SSH 密钥? 2. 使用 HTTPS 和 SSH 协议克隆仓库有什么区别? 3. 如何彻底卸载并重新配置 Git 的 SSH 设置? : git clone代码出现Permission denied (publickey,password):Git】解决 git pull 提示 Permission denied (publickey) 的问题。 [^3]: git配置Permission denied (publickey)错误的解决。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值