使用Git时如何解决Permission denied(publickey)错误?

问题描述 投票:523回答:37

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

我刚试过

git clone [email protected]:cakebook.git

但这给了我这个错误:

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

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

git ssh ssh-keys public-key
37个回答
662
投票

用户之前没有生成ssh公钥/私钥对?

此信息适用于该问题,但可以应用于支持SSH pubkey身份验证的所有其他git存储库。 (例如,请参阅gitolite,gitlab或github。)

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

  • 首先,您需要进入.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
  • 通过网站将您的密钥添加到您的帐户。
  • 最后设置你的.gitconfig。 git config --global user.name "bob" git config --global user.email bob@...(不要忘记重新启动命令行以确保重新加载配置)

多数民众赞成你应该克隆和结帐。

更多信息可以在https://help.github.com/articles/generating-ssh-keys找到(感谢@Lee Whitney) -

用户之前是否已生成ssh公钥/私钥对?

  • 检查您的github或gitlab帐户设置上已授权的密钥
  • 告知必须从本地计算机关联哪个对应的私钥

eval $(ssh-agent -s)

告诉钥匙的位置

ssh-add ~/.ssh/id_rsa


11
投票

我正在努力解决同样的问题,这就是我所做的,我能够克隆回购。我按照这些程序进行了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 "[email protected]"的有效电子邮件地址输入followong命令
  3. 您将在终端Generating public/private rsa key pair中看到以下内容。当它提示to"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. Interminal type 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帐户转到设置> SSH和GPG密钥>新建SSH密钥输入标题并从剪贴板粘贴密钥并保存。瞧,你已经完成了。

6
投票

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


5
投票

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

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

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


5
投票

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

尝试运行ssh -vT [email protected]。记下identity file所在的位置。对我来说,这不是指向我的正常\Users\MyLogin,而是指向网络驱动器,因为在网络级别推送的环境变量发生了变化。

解决方案?由于我的新%HOMEDRIVE%具有与我的本地文件相同的权限,我只是将我的.ssh文件夹移动到那里,并将其称为一天。


5
投票

伙计这就是它对我有用的方式:

1-打开终端并转到用户[见附图]

2-打开.ssh文件夹并确保它没有像id_rsa或id_rsa.pub这样的文件,否则有时它不会正确地重写文件

3 - git --version [检查git安装和版本]

4- git config --global user.email“你的电子邮件ID”

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来获取shell作为root可能更好)。如果你生成没有sudo的SSH密钥,然后尝试使用像sudo git push这样的命令,你就不会使用你生成的相同密钥

enter image description here

enter image description here


4
投票

最简单的方法之一

去终端 -

  git push <Git Remote path> --all

3
投票

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

  • type id_rsa.pub | clip

参考文献:


3
投票

如果你有多个钥匙,你可能需要做ssh-add private-keyfile


2
投票

我在设置当前项目时遇到过这个问题,上述解决方案都没有。所以我尝试使用命令ssh -vT [email protected]查看调试列表中发生的事情。我注意到我的私钥文件名不在列表中。所以将私钥文件名重命名为'id_rsa'来完成这项工作。希望这可以帮助。


2
投票

它很直接。输入以下命令

ssh-keygen -t rsa -b 4096 -C "[email protected]"

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


189
投票

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

ssh -vT [email protected]

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


1
投票

尝试运行makefile时,我收到类似的Permission denied(publickey)错误。

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

单击从 - https://help.github.com/articles/set-up-git#platform-mac下载GitHub for Mac

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

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

我的错误是固定的。


1
投票

我得到了同样的错误。我的问题是在sudo混合。

我无法在没有使用sudo前缀git clone命令的情况下自动创建我正在克隆的目录。但是,当我这样做时,我的ssh键没有被正确引用。

要修复它,我通过chmod在我想要包含我的克隆的父目录上设置权限,以便我可以写入它。然后我运行git clone没有sudo前缀。然后它工作了!之后我更改了权限。完成。


1
投票

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


1
投票

它对我有用。

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

pbcopy <〜/ .ssh / id_rsa.pub

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

1
投票

它对我有用

ssh -i [your id_rsa path] -T [email protected]

1
投票

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

 git remote set-url origin https://[email protected]/USERNAME/PROJECTNAME.git

1
投票

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

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


1
投票

在我的情况下,我重新安装了ubuntu,用户名从以前更改过。在这种情况下,生成的ssh密钥也与前一个密钥不同。

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


1
投票

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

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

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

我认为这是一个错误。

我可以找到运行ssh -vT [email protected]的这种行为


1
投票

我遇到这个错误,因为我需要给我目前的工作目录权限700:

chmod -R 700 /home/ec2-user/

147
投票

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

有时您只想克隆自己的仓库,例如部署到服务器。在这种情况下,您实际上只需要R​​EAD-ONLY访问权限。但由于这是你自己的回购,GitHub可能会显示SSH URL,如果这是你的偏好。在这种情况下,如果您的远程主机的公钥不在您的GitHub SSH密钥中,您的访问权将被拒绝,预计会发生这种情况。

同样的情况是当您尝试使用SSH URL克隆其他人没有写访问权限的repo时。

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


更新:GitHub现在显示HTTPS作为默认协议,此举可能会减少可能滥用SSH URL的行为。


0
投票

使用Github的ssh链接,但确保不用ssh附加它只是使用git hub上的ssh选项卡让你克隆你的repo。


93
投票

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

命令1:

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

eval "$(ssh-agent -s)"

命令2:

将SSH密钥添加到ssh-agent:

ssh-add ~/.ssh/id_rsa

20
投票

这对我有用:

ssh-add ~/.ssh/id_rsa

19
投票

得到相同的错误报告。

修复了使用HTTP而不是。因为我不想为测试PC设置“SSH密钥”。

克隆时将URL更改为HTTP:

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

我的问题有点不同:我在将现有本地存储库添加到远程时设置了URL,方法是:

git remote add origin ssh://github.com/USERNAME/REPOSITORY.git

要解决此问题,请将URL重置为HTTP:

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

顺便说一句,您可以使用以下命令检查您的URL:

git remote -v
origin  https://github.com/USERNAME/REPOSITORY.git (fetch)
origin  https://github.com/USERNAME/REPOSITORY.git (push)

希望这会对像我这样的人有所帮助。 :d


18
投票

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

查看身份验证代理中列出的密钥(ssh-add -l) (如果您没有看到任何内容,请使用ssh-add / path /添加一个现有密钥到/ 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时看到的哈希值之一相匹配。

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


13
投票

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

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

我修复它的方法是更改​​我的Mac上的文件/ etc / ssh_config。从

ForwardAgent no 

ForwardAgent yes

12
投票

我遇到了同样的问题,因为我认为SSH和HTTPS之间存在差异

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

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

所以我只是通过将https://更改为ssh://而从HTTPS更改为SSH,更改了URL的末尾没有任何内容。

但事实是:

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

[email protected]:USERNAME/REPOSITORY.git

这意味着我将ssh://github.com/USERNAME/REPOSITORY.git改为[email protected]:USERNAME/REPOSITORY.git

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

© www.soinside.com 2019 - 2024. All rights reserved.