【问题标题】:Git: How to solve Permission denied (publickey) error when using Git?Git:使用 Git 时如何解决 Permission denied (publickey) 错误?
【发布时间】:2011-02-08 06:24:28
【问题描述】:

我在 Mac Snow Leopard 上,我刚刚安装了 git

我刚试过

git clone git@thechaw.com:cakebook.git

但这给了我这个错误:

Initialized empty Git repository in `/Users/username/Documents/cakebook/.git/`
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

我错过了什么?
我也尝试过 ssh-keygen 没有 passphase 但仍然是同样的错误。

【问题讨论】:

  • 您是否尝试上传通过 ssh-keygen 生成的公钥?
  • 我的问题是我尝试从 sudo 克隆 - 这是另一个拥有另一个公钥的用户。
  • 同样的错误。我之前通过 github 创建了一个公钥,然后使用 ssh-keygen 实用程序生成了另一个密钥对。在 github 的个人设置中删除旧的公钥并将我的 ssh 生成的 id_rsa.pub 密钥添加到 SSH 和 GPG 密钥修复了克隆权限问题。

标签: git ssh ssh-keys public-key


【解决方案1】:

如果用户之前没有生成过 ssh 公私钥对集

此信息正在 TheChaw 上运行,但可以应用于所有其他支持 SSH 公钥身份验证的 git 存储库。 (例如,参见 [gitolite][1]、gitlab 或 github。)

首先设置您自己的公钥/私钥对集。这 可以使用 DSA 或 RSA,因此基本上您设置的任何密钥都可以使用。 在大多数系统上,您都可以使用 ssh-keygen。

  • 首先,您需要 cd 进入您的 .ssh 目录。打开终端并运行:

cd ~/.ssh && ssh-keygen

  • 接下来,您需要将其复制到剪贴板。
  • 在 OS X 上运行:cat id_rsa.pub | pbcopy
  • 在 Linux 上运行:cat id_rsa.pub | xclip
  • 在 Windows 上(通过 Cygwin/Git Bash)运行:cat id_rsa.pub | clip
  • 在 Windows (Powershell) 上运行:Get-Content id_rsa.pub | Set-Clipboard(感谢 @orion elenzil)
  • 通过网站将您的密钥添加到您的帐户。
  • 最后设置您的 .gitconfig。
  • git config --global user.name "bob"
  • git config --global user.email bob@... (不要忘记重新启动命令行以确保重新加载配置)

就是这样,你应该很好地克隆和结帐。

更多信息请访问https://help.github.com/articles/generating-ssh-keys(感谢@Lee Whitney) [1]:https://github.com/sitaramc/gitolite

-

如果用户之前已经生成了 ssh 公私钥对集

  • 检查您的 github 或 gitlab 帐户设置中已授权的密钥
  • 确定必须与本地计算机关联的相应私钥

eval $(ssh-agent -s)

  • 定义键的位置

ssh-add ~/.ssh/id_rsa

【讨论】:

  • 好的。这实际上不是 git,而是 ssh 同步问题。我对 Assembla 也有同样的看法,你的链接帮助我解决了这个问题。谢谢!
  • 我遇到了注册机问题。它对全局环境变量中的电子邮件地址很敏感。如果您遇到此问题,您需要在第一步中为您的 github 帐户指定电子邮件地址:ssh-keygen -t rsa -C "your_email@youremail.com"
  • 如果还是不行,你需要ssh-add ~/.ssh/id_rsa
  • 在 Linux 上使用xclip 进行复制只能通过执行以下列出的xclip -sel clip < ~/.ssh/id_rsa.pub 来工作:help.github.com/articles/generating-ssh-keys
  • 如果您使用的是 PowerShell,则“复制到剪贴板”步骤可以是 cat id_rsa.pub | Set-Clipboard,或者更强大的是 Get-Content id_rsa.pub | Set-Clipboard
【解决方案2】:

可以通过以下方式进行更广泛的故障排除甚至自动修复:

ssh -vT git@github.com

或者,根据下面的 cmets,我们可以发出:

ssh -vT git@gitlab.com

或将 gitlab/github 替换为您的组织正在运行的任何 Git 实例。

来源:https://help.github.com/articles/error-permission-denied-publickey/

【讨论】:

  • 我的问题与我的服务器使用不同的密钥有关。使用上述命令确定问题后,我在配置文件中修复了 identifyFile 并且它起作用了。
  • 显示了 github 尝试使用哪个密钥进行身份验证。 v 有帮助
  • 这并不能解决任何问题。我仍然收到 OP 问题中的错误。
  • 该命令可以帮助您解决问题,它不是一个神奇的为我修复这个开关。
  • 我不能说这解决了任何问题,但这是一个非常有趣的命令,并且也适用于 GitHub Enterprise。
【解决方案3】:

基本的 GIT 指令没有提到 SSH 密钥的东西。在上面的一些链接之后,我找到了一个 git 帮助页面,它逐步解释了如何为各种操作系统执行此操作(该链接将检测您的操作系统并相应地重定向):

http://help.github.com/set-up-git-redirect/

它介绍了 GITHub 所需的所有内容,并提供了详细的解释,例如“为什么在创建 RSA 密钥时添加密码短语”。我想我会发布它,以防它帮助别人......

【讨论】:

    【解决方案4】:

    使用来自 Github 的 ssh 链接,但请确保不要将其附加到 ssh 中,只需使用 git hub 上的 ssh 选项卡为您提供的内容来克隆您的 repo。

    【讨论】:

      【解决方案5】:

      在 Windows 上,确保您的所有应用都同意 HOME。 Msys 出人意料地不会为你做这件事。我不得不设置一个环境变量,因为 ssh 和 git 似乎无法就我的 .ssh 目录的位置达成一致。

      【讨论】:

        【解决方案6】:

        请注意(至少对于某些项目而言)您必须拥有一个带有 ssh 密钥的 github 帐户

        查看您的身份验证代理中列出的密钥 (ssh-add -l)
        (如果您没有看到任何密钥,请使用 ssh-add /path/to/your/key 添加现有密钥之一(例如:ssh-add ~/.ssh/id_rsa))
        (如果您没有任何密钥,请先创建一个。请参阅:http://rcsg-gsir.imsb-dsgi.nrc-cnrc.gc.ca/documents/internet/node31.html 或只是 google ssh-keygen)

        验证您是否拥有与您的 github 帐户关联的密钥

        转至:https://github.com/settings/ssh

        您应该会看到至少一个键与您在一分钟前键入 ssh-add -l 时看到的其中一个哈希键匹配。

        如果没有,请添加一个,然后重试。

        【讨论】:

        • 这对我有用。这发生在我身上,因为我的密钥没有添加到身份验证代理中。谢谢。
        • 如果您被要求使用 SSH 密钥(网址看起来像 git@github.company.com 而不是 https://github.company.com)但您的 Github 设置没有 SSH 密钥,您就会知道您遇到了这个问题。 Github 在docs.github.com/en/github/authenticating-to-github/… 提供分步指导。
        【解决方案7】:

        当您访问 SSH URL(读/写)而不是 Git 只读 URL 但您没有对该存储库的写入权限时,可能会发生此错误。

        有时您只想克隆自己的 repo,例如部署到服务器。在这种情况下,您实际上只需要只读访问权限。但由于这是你自己的 repo,如果你愿意,GitHub 可能会显示 SSH URL。在这种情况下,如果您的远程主机的公钥不在您的 GitHub SSH 密钥中,您的访问将被拒绝,这是预期发生的

        一种等效的情况是,当您尝试使用 SSH URL 克隆您没有写入权限的其他人的存储库时。

        总之,如果您的意图是仅克隆一个 repo,请使用 HTTPS URL (https://github.com/{user_name}/{project_name}.git) 而不是 SSH URL (git@github.com:{user_name}/{project_name}.git),这样可以避免(不必要的)公钥验证。


        更新:GitHub 现在将 HTTPS 显示为默认协议,这一举措可能会减少 SSH URL 的可能滥用。

        【讨论】:

        • 使用https://github.com git url,它仍然显示SSL certificate problem: self signed certificate in certificate chaingit -c http.sslVerify=false clone ... 似乎是一个危险的举动。不过,Chrome 并没有给出任何 ssl 警告。想法?
        • @uosɐſ 抱歉,我从来没有遇到过这个问题。也许要做的第一件事是在不同的机器上尝试相同的命令,看看问题是否仍然存在。
        • 这也是为我做的。谢谢。为了将我的 git 存储库克隆到我的共享主机帐户(1and1),我必须使用 git clone https://github.com/MyUserName/MyRepo.git 只需单击 Github 页面右侧的存储库 URL 下方的文本链接,其中显示“您可以使用克隆HTTPS、SSH 或 Subversion。”。 (点击HTTPS获取链接,而不是默认的SSH。)
        • 优秀的答案。终于有人解释了为什么会这样。
        • 我遇到了同样的问题;我可以(写入)使用 SSH 密钥访问面向公众的存储库,但需要只读访问权限才能克隆 LFS 对象。用 HTTPS URL 替换 ssh 地址解决了我的问题。
        【解决方案8】:

        我在尝试运行 makefile 时遇到了类似的Permission denied (publickey) 错误

        作为上述 SSH 步骤的替代方法,您可以安装本机 GitHub for Mac 应用程序。

        点击 Download GitHub for Mac from - https://help.github.com/articles/set-up-git#platform-mac

        一旦您使用 git hub 帐户完成设置(我还安装了 git hub 命令行工具,但不确定是否需要此步骤)然后我收到一封电子邮件 -

        [GitHub] 新的公钥已添加到您的帐户中

        我的错误已修复。

        【讨论】:

          【解决方案9】:

          最简单的方法之一

          去终端-

            git push <Git Remote path> --all
          

          【讨论】:

            【解决方案10】:

            我的情况略有不同,我登录到远程服务器并在服务器上使用 git,当我运行任何 git 命令时,我得到了相同的消息

               Permission denied (publickey).
               fatal: The remote end hung up unexpectedly
            

            我修复它的方法是在我的 Mac 上更改文件 /etc/ssh_config。 来自

            ForwardAgent no 
            

            ForwardAgent yes
            

            【讨论】:

            • 尝试从 VirtualBox VM 从 github 获取 gem 时发生错误。更新了我的 Vagrantfile 以使用 config.ssh.forward_agent = true,重新启动 VM,现在它可以工作了。
            • 根据这个可能不是安全方面的最佳选择:heipei.github.io/2015/02/26/…
            【解决方案11】:

            您在corporate environment 中吗?您的系统变量最近是否可能发生了变化?根据this SO 回答,ssh 密钥位于%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub。因此,如果%HOMEDRIVE% 最近发生了变化,git 不知道在哪里查找您的密钥,因此也不知道所有身份验证内容。

            尝试运行ssh -vT git@github.com。记下identity file 的位置。对我来说,这不是指向我正常的\Users\MyLogin,而是指向网络驱动器,因为在网络级别推送了对环境变量的更改。

            解决方案?由于我的新 %HOMEDRIVE% 与我的本地文件具有相同的权限,我只是将我的 .ssh 文件夹移到那里,然后就结束了。

            【讨论】:

            • 这项工作适合我。昨天我的 ssh 密钥工作,但今天我的系统的一些设置被改变了。我只是再次添加了 shh 键,它现在可以工作了。
            【解决方案12】:

            除了Rufinus的回复,在Windows中将你的ssh密钥复制到剪贴板的快捷方式是:

            • type id_rsa.pub | clip

            参考:

            【讨论】:

              【解决方案13】:

              我遇到了同样的错误。我的问题是混入 sudo。

              如果没有在 git clone 命令前加上 sudo,我无法自动创建要克隆到的目录。但是,当我这样做时,我的 ssh 密钥没有被正确引用。

              为了解决这个问题,我通过 chmod 在要包含我的克隆的父目录上设置权限,以便我可以写入它。然后我运行 git clone 没有 sudo 前缀。然后它起作用了!之后我将权限更改回来。完成。

              【讨论】:

                【解决方案14】:

                github帮助link帮我解决了这个问题。看起来 ssh 密钥未添加到 ssh-agent。这就是我最终要做的。

                命令 1:

                确保 ssh-agent 已启用。该命令在后台启动 ssh-agent:

                eval "$(ssh-agent -s)"
                

                命令 2:

                将您的 SSH 密钥添加到 ssh-agent:

                ssh-add ~/.ssh/id_rsa
                

                【讨论】:

                • 升级到 OSx El Capitan 到 Sierra 后,这对我有用。
                • 升级到 macOS Sierra 后为我工作 =)
                • 这在 Raspberry Pi 上对我有用,显然 ssh-add 有一个“-k”标志而不是“-K”。但是一旦我添加了我的部署密钥,我就能够使用它的 SSH 链接成功地克隆我的 repo。
                • 这是真正的解决方案,它在 4 年后被复制并粘贴到已接受的答案中(Jan 11 ' 19),所以这值得我们点赞!
                【解决方案15】:

                我刚刚在设置当前项目时遇到了这个问题,上述解决方案均无效。所以我尝试使用命令 ssh -vT git@github.com 查看调试列表中实际发生的情况。我注意到我的私钥文件名不在列表中。所以将私钥文件名重命名为“id_rsa”就可以了。希望这会有所帮助。

                【讨论】:

                • 在您使用“id_rsa”键用于其他任何事情的情况下没有帮助......
                【解决方案16】:

                我收到此错误是因为我使用错误的电子邮件生成了 ssh 密钥。我能够使用 ssh 进行连接,但不能使用 git。解决方案是使用我的 github 帐户的主电子邮件地址重新生成密钥。

                【讨论】:

                  【解决方案17】:

                  它对我有用。

                  您的公钥保存在 id_rsa.pub;文件中,是您上传到帐户的密钥。您可以通过运行以下命令将此密钥保存到剪贴板:

                  pbcopy

                  • 将 SSH 密钥复制到剪贴板,返回 Web 门户。
                  • 在 SSH 密钥字段中,粘贴您的 SSH 密钥。
                  • 在“名称”字段中,提供密钥的名称。
                  • 保存。

                  【讨论】:

                    【解决方案18】:

                    它对我有用

                    ssh -i [your id_rsa path] -T github@github.com
                    

                    【讨论】:

                    • 你最好解释一下为什么你的回答会解决他的问题,谢谢。
                    【解决方案19】:

                    伙计们,这对我来说是这样的:

                    1. 打开终端并转到用户[见附图]
                    2. 打开 .ssh 文件夹并确保它没有像 id_rsa 或 id_rsa.pub 这样的文件,否则有时它不会正确重写文件
                    3. git --version [检查 git 安装和版本]
                    4. git config --global user.email "你的邮箱"
                    5. git config --global user.name "你的名字"
                    6. git config --list [确保您已设置您的姓名和电子邮件]
                    7. cd ~/.ssh
                    8. ssh-keygen,提示保存文件,允许
                    9. cat ~/.ssh/id_rsa.pub [访问您的公钥并将密钥复制到 gerrit 设置]

                    注意:您不应该在 Git 中使用 sudo 命令。如果您有充分的理由必须使用 sudo,那么请确保您在每个命令中都使用它(此时使用 su 以 root 身份获取 shell 可能会更好)。如果您在没有 sudo 的情况下生成 SSH 密钥,然后尝试使用 sudo git push 之类的命令,您将不会使用生成的相同密钥

                    【讨论】:

                    • 非常感谢 - git repo 中的名称更改为在 repo 设置中部署密钥
                    【解决方案20】:

                    如果您有多个密钥,您可能需要这样做 ssh-add private-keyfile

                    【讨论】:

                    • 非常感谢!这确实是我的问题。
                    • [root@li566-238 hanjiyun]# ssh-add private-keyfile private-keyfile: No such file or directory
                    【解决方案21】:

                    我遇到了同样的问题,因为我认为 SSHHTTPS 之间的区别是

                    https://github.com/USERNAME/REPOSITORY.git

                    ssh://github.com/USERNAME/REPOSITORY.git

                    所以我从 HTTPS 更改为 SSH 只需将 https:// 更改为 ssh:// 网址末尾的任何内容都没有更改。

                    但事实是:

                    https://github.com/USERNAME/REPOSITORY.git
                    
                    git@github.com:USERNAME/REPOSITORY.git
                    

                    这意味着我将 ssh://github.com/USERNAME/REPOSITORY.git 更改为 git@github.com:USERNAME/REPOSITORY.git 它有效。

                    愚蠢的错误,但希望对某人有所帮助!

                    【讨论】:

                    • 是的,我将 ssh://github.com/USERNAME/REPOSITORY.git 更改为 git@github.com:USERNAME/REPOSITORY.git 它有效。
                    • 当然。我只是说我不明白提到 https 的意义;)
                    • 我明白了,因为我只是使用 ssh 而不是 https 所以我只是将 'https://' 更改为 'ssh://` 然后我得到了错误。所以将 'ssh://git/../` 更改为 'git@../" :) 编辑了我的答案。
                    • 它对我有用。非常感谢!我尝试了 https,然后尝试了 ssh,但它仍然拒绝我的访问,直到使用“git clone git@github.com:/myusername/myproject.git”。
                    【解决方案22】:

                    它非常简单。输入以下命令

                    ssh-keygen -t rsa -b 4096 -C "youremailid@yourdomain.com"
                    

                    生成 SSH 密钥。打开文件并复制内容。进入 GitHub 设置页面,点击 SSH 密钥。单击添加新的 SSH 密钥,然后将内容粘贴到此处。就是这样 :) 你应该不会再看到这个问题了。

                    【讨论】:

                      【解决方案23】:

                      当您尝试使用不同的用户名推送到存储库时,最简单的解决方案是:

                       git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git
                      

                      【讨论】:

                        【解决方案24】:

                        这对我有用:

                        ssh-add ~/.ssh/id_rsa
                        

                        【讨论】:

                          【解决方案25】:

                          我正在努力解决与我所做的相同的问题,并且我能够克隆存储库。我为 iMac 遵循了这些程序。

                          第一步:检查我们是否已经拥有公共 SSH 密钥。

                          1. 打开终端。
                          2. 输入 ls -al ~/.ssh 以查看是否存在现有的 SSH 密钥:

                          检查目录列表以查看您是否已有公共 SSH 密钥。默认公共是以下 d_dsa.pub、id_ecdsa.pub、id_ed25519.pub、id_rsa.pub 之一

                          如果找不到,请转到第 2 步,否则请按照第 3 步操作

                          第 2 步:生成 SSH 公钥

                          1. 打开终端。
                          2. 使用您用于 github ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 的有效电子邮件地址输入 followong 命令
                          3. 您将在终端Generating public/private rsa key pair 中看到以下内容。当它提示"Enter a file in which to save the key," 时,按 Enter。这接受默认文件位置。当它提示Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter] 时,只需再次按回车键。 根据提示输入安全密码。
                          4. Enter passphrase (empty for no passphrase): [Type a passphrase] 不想按回车Enter same passphrase again: [Type passphrase again] 再按回车

                          这将生成id_rsa.pub

                          第 3 步:将 SSH 密钥添加到 ssh-agent

                          1. 终端类型eval "$(ssh-agent -s)"
                          2. 将您的 SSH 密钥添加到 ssh-agent。如果您使用现有的 SSH 密钥而不是生成新的 SSH 密钥,您需要替换 命令中的 id_rsa 与您现有的私钥的名称 文件。输入此命令$ ssh-add -K ~/.ssh/id_rsa

                          现在复制 SSH 密钥并将其添加到您的 github 帐户中

                          1. 在终端中输入此命令,并使用您的 ssh 文件名pbcopy < ~/.ssh/id_rsa.pub 这会将文件复制到剪贴板 现在打开你的 github 帐户 转到 Settings > SSH and GPG keys > New SSH key 输入标题并从剪贴板粘贴密钥并保存。瞧,你完成了。

                          【讨论】:

                          • Windows 用户复制方式:cat ~/.ssh/id_rsa.pub |剪辑
                          • 终于在这里和那里阅读了一个小时后,一步一步的解决方案....效果很好。请记住在步骤中添加您的 github 密码作为密码,否则每次都必须手动添加
                          • 这对我来说是完美的答案。谢谢!
                          • 很好的答案。我还要补充一点,获取有关如何更改远程 git 详细信息的信息对我很有帮助——有关详细信息,请参阅此链接:stackoverflow.com/a/63830575/1818235
                          • OMYGOD U R A GODSEND,对我来说是完美的答案,因为我有一段时间没有使用 sourcetree。
                          【解决方案26】:

                          通过在我的 ubuntu 系统中执行以下步骤,我能够解决这个问题。因为我正在尝试对系统使用无密码 ssh。

                          sudo vi /etc/ssh/sshd_config

                          1) 评论如下: #更改为 no 以禁用隧道明文密码 #PasswordAuthentication 是 PasswordAuthentication no ----> 对此发表了评论。

                          2) 然后重启 sshd 守护进程,如下所示。

                          服务 sshd 重启

                          【讨论】:

                            【解决方案27】:

                            Mac 的步骤:

                            1. 切换用户 (sudo su - jenkins)
                            2. 生成密钥(ssh-keygen -t rsa -b 4096 -C "username")。用户名 是您与 jenkins 一起使用的一个。
                            3. 复制生成的公钥 (cat ~/.ssh/id_rsa.pub)。
                            4. 将密钥粘贴到 git 帐户。 (设置 -> SSH 和 CPG 密钥 -> 新建 ssh 密钥 -> 输入密钥的名称(可以是任何名称)并将密钥粘贴到 描述)。

                            【讨论】:

                              【解决方案28】:

                              这个奇怪的错误,在我的例子中是 gnome-keyring-daemon 错误地命名它需要密码的密钥的症状。

                              我按照此处列出的步骤,并通过终端输入密码。错误,又名令人困惑的 GUI 界面,已得到解决。 见:https://askubuntu.com/questions/3045/how-to-disable-gnome-keyring

                              【讨论】:

                                【解决方案29】:

                                在我的情况下,我已经重新安装了 ubuntu,并且用户名与以前的不同。在这种情况下,生成的 ssh 密钥也与之前的不同。

                                只需复制存储库中的当前 ssh 公钥即可解决问题。密钥将在您用户的/home/.ssh/id_rsa.pub 中提供

                                【讨论】:

                                  【解决方案30】:

                                  在我的 MAC 中,我解决了这个问题:

                                  cp ~/.ssh/github_rsa ~/.ssh/id_rsa
                                  

                                  由于某种原因,我的 git 停止在 github_rsa 文件中查找私钥。这发生在特定的回购中。我的意思是,在其他存储库中,git 一直正常工作。

                                  我认为这是一个错误。

                                  我可以发现这种行为正在运行 ssh -vT git@github.com

                                  【讨论】:

                                    猜你喜欢
                                    • 2019-01-25
                                    • 2013-10-13
                                    • 2018-05-17
                                    • 2016-10-04
                                    • 2016-01-05
                                    • 2021-09-23
                                    • 2012-05-03
                                    相关资源
                                    最近更新 更多