权限被拒绝(公钥) 在 Windows 7 上使用 Git 出错。

69

当我想要使用这个命令推送到GitHub时

git push origin master
我得到了这个
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

那么,出了什么问题?

16个回答

79

欧瑞卡!

显然,你可以使用 plink 作为主要的ssh客户端,并只需在 pageant 中加载你的密钥(如果你和我一样已经这么做了):

这可以通过将GIT_SSH环境变量设置为Plink.exe路径来完成,如下所示:

set GIT_SSH=C:\Program Files\PuTTY\plink.exe

或者,你可以使用 TortoiseGit 中的 plink:

set GIT_SSH=c:\Program Files\TortoiseGit\bin\TortoisePLink.exe

参考来源: 原始解决方案来自此博客文章


2
太好了,这就是我一直在寻找的。 :-) 你可以通过控制面板 > 系统 > 高级系统设置 > 环境变量将这些值设置为永久环境变量。 - Simon East
经过几周的痛苦,我想出了这个解决方案。实际上,我将plink.exe复制到了c:\windows目录下,因为设置环境变量并没有真正帮助解决问题。 - Alex Buznik
1
在64位系统上,Putty的命令行永久版本是:setx GIT_SSH "C:\Program Files (x86)\PuTTY\plink.exe" - karel_evzen
1
太棒了!即使在2020年,这篇文章仍然非常有用!我正在运行Win7(是的,我知道),并使用PuTTY。这里需要补充一件重要的事情(在链接的博客文章中):我在命令行中添加指纹时遇到了很多问题。解决方法是打开PuTTY,只需在“主机”中输入例如github.com,然后按回车键,接着您就可以接受该主机了。 - 244an

47
我能够如下解决这个问题:
当你执行以下操作时:
ssh-keygen -t rsa

在生成密钥时,它会提示您(可选)输入要保存的文件名。 指定文件名浪费了我整整一天的时间!第二天我让它使用默认文件名,问题就消失了!想象一下!!

平台是Win7和msysgit。


17
对于Windows和msysgit:如果你使用自定义文件名作为密钥(而不是默认的id_rsa),那么请确保将其添加到~/.ssh/config中:IdentityFile ~/.ssh/customname(将customname替换为你的密钥名称,不包括.pub)。在Linux环境中似乎不需要这样做。 - matb33
我已经遇到了一个星期的问题。谢谢。 - Brandon Poole
你可以以什么方式不使用默认名称?因为必须指定一些文件名吗? - user1459144
@user1459144 当它提示您输入文件名时,会显示默认文件名。据我所知,如果您不输入任何文件名(即只按Enter键),它将继续使用默认文件名。 - G Shah
你救了我的一天,我生成了密钥,然后将.pub文件添加到我的GitHub帐户中,然后它就正常工作了。 - Mahmoud Felfel

43
以下是我用来使其正常工作的分步指南。
平台:Windows 7
http://msysgit.github.io/安装 msysgit。
在安装过程中,接受除“选择组件”选项之外的所有默认选项。当该选项出现时,请选择“Git Bash Here”选项。虽然这不是必需的,但它会在 Windows Explorer 中工作时添加一个很好的上下文菜单,我发现这非常有帮助。

enter image description here

安装完msysgit后,Git Bash也会被安装。有两种方法打开Git Bash:

  • 点击Windows开始键并开始输入Git Bash
  • 或者右键点击某个地方(例如您的桌面)并选择“Git Bash Here”。只有在安装了“Git Bash Here”上下文菜单选项时才可用。

在Git Bash的命令窗口中输入以下内容:

$ ssh-keygen -t rsa

当要求输入文件名时,只需接受默认值。在提示时选择一个强密码短语,你的公钥应该已经保存。你的屏幕应该看起来像这样:

enter image description here

请在记事本中打开公钥文件。该文件应该位于以下位置:

C:\Users\{username}\.ssh\id_rsa.pub

将文件中的所有内容复制到剪贴板中,然后转到GitHub的SSH设置页面:

https://github.com/settings/ssh

选择“添加SSH密钥”,输入一个有用的“标题”,并将内容粘贴到“密钥”文本框中。
为了简化您的生活,您可以使用SSH代理保存您的密码,以便您无需记住它。要这样做,请在Git Bash中键入以下内容:
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/id_rsa

当您输入命令时,系统会提示您输入密码。如果一切顺利,您的身份将被添加。请注意:只要关闭shell,此密码就会被遗忘。我不确定如何使其在不同的会话中持久存在,但也许有人可以提供帮助?

为了测试所有功能是否正常,请在Git Bash中输入以下内容:

$ ssh -T git@github.com

您应该看到一个“成功”消息。

来源:

https://help.github.com/articles/generating-ssh-keys/

https://help.github.com/articles/working-with-ssh-key-passphrases/

explanation on why eval `ssh-agent -s` should be used instead of just ssh-agent -s

https://dev59.com/fGMm5IYBdhLWcg3wIsQ2#17848593


4
我已按照这里描述的步骤进行了操作,除了保存密码外。但它没有起作用。在输入“ssh -T git@github.com”命令后,我仍然收到“Permission denied (publickey)”的提示。我不知道问题出在哪里。 - Sergey Dirin
非常奇怪。我在两台机器上(Windows 7和Windows 8)都进行了这个过程,它们都对我起作用了。你能试着保存密码吗? - Johnny Oshika
结果发现它不仅适用于控制台,任何应用程序都可以正常工作。 - Sergey Dirin
实际上,命令:eval \ssh-agent -s`` 是关键。我使用这个一行命令来解决问题。 - Ni Xiaoni
1
@GabrielDevillers,直接输入:$ eval \ssh-agent -s`` - Ni Xiaoni

11
你是否为自己生成了 SSH 密钥并将其添加到 Github 账户中呢?他们在这里提供了相关指南:链接

嗨,我尝试了以上URL中的步骤。但是在执行ssh-add ~/.ssh/id_rsa之后,它报错:“无法打开到您的身份验证部分的连接”。你能帮我吗? - AnNaMaLaI

7
使用Windows 8 进行SSH和Github设置
  1. 如果出现“Permission denied (publickey)”的提示,您需要为密钥输入密码。不要尝试只是按回车键...这就是我成功的方法...我花了五个小时才意识到按回车键会让OpenSSH觉得您的密钥太公开了,这就是为什么它拒绝让您进行下一步。

  2. 如果出现“The authenticity of host 'github.com (203.232.175.90)' can't be established.”的提示,那么您需要按照此处所示的过程进行操作:[Google]

跳转到 “Verify the public key is attached to your GitHub account” 部分。您需要从account开始阅读。(我假设您已经有一个账户)。

同时,您需要位于C:\RailsInstaller\Git.ssh目录下,并且当我运行'dir'命令时,我发现我有'.', '..', 'known_hosts'文件。我必须通过以下方式获取新密钥(我在Github网站上找到了这个方法):

"ssh-keygen -t rsa -C "your_email@example.com" # 创建一个新的SSH密钥,使用提供的电子邮件作为标签 # Generating public/private rsa key pair. < # 输入要保存密钥的文件(/c/Users/you/.ssh/id_rsa):[按回车键]"

并且需要注意密钥将被保存的文件路径。不要只是按回车键...我的路径显示为“(//.ssh/id_rsa)”我必须输入“/.ssh/id_rsa”以确保它位于正确的目录中。

之后,您就可以在命令行中输入SSH命令。如果您无法这样做,您需要将其添加到您的路径中。


4

我曾经通过添加系统环境变量解决了一个类似的问题。关键在于我正在指向cmd文件夹中的git.exe

名称:GIT
值:C:\Program Files (x86)\Git\cmd\git.exe


3
为什么会有两个 git.exe 文件?一个在 C:\Program Files (x86)\Git\bin 目录下,另一个在 C:\Program Files (x86)\Git\cmd 目录下。请问有什么原因吗? - AlikElzin-kilaka
将我的路径更改为C:\Program Files (x86)\Git\cmd而不是\bin解决了我的问题。 - Ryan Rodemoyer

3
如果您已经生成了密钥,并且它具有默认名称,则问题可能在于缺少环境变量。在Windows 7上,右键单击“我的电脑”,然后转到属性。在那里点击高级属性并单击环境变量按钮。然后添加用户环境变量。
Name: HOME 
Value: %USERPROFILE%

3

2
问题可能与ssh.exe在PATH环境变量中的顺序有关。
在我的情况下,C:\Program Files(x86)\git和C:\cwgwin目录中都有ssh.exe。当我使用Git Bash时一切正常(它使用git目录中的ssh),但是当我使用命令提示符时,它使用的是cygwin目录中的ssh。
当我尝试访问github时,由于密钥未附加到命令提示符正在使用的ssh上(即C:\cygwin),因此无法找到带有私钥的.ssh文件夹,这就是我收到“Permission Denied”错误的原因。
我所做的是重命名(或删除)C:\cygwin目录中的git.exe和ssh.exe,并确保C:\Program Files(x86)\git出现在路径顺序中的C:\cwgwin之前。

如果您实际上更喜欢使用Cygwin Git而不是Msysgit呢?它更新得多... - eis

1

这是Windows 7的默认输出。

c:\test\app>ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (//.ssh/id_rsa):
Could not create directory '//.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
open //.ssh/id_rsa failed: No such host or network path.
Saving the key failed: //.ssh/id_rsa.

不再使用命令提示符,而是按照http://help.github.com/win-set-up-git/中的说明使用git?


只想补充一下,GitHub 的便携版会给你带来很多麻烦,最好还是直接安装正式版。 - cracked_all

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接