Git – 权限被拒绝(公钥)

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

我刚试过

git clone git@thechaw.com:cakebook.git

但是这给了我这个错误。

在`/ Users / username / Documents / cakebook / .git /`中初始化了空的Git仓库
权限被拒绝(publickey)。
致命的:远端意外挂断

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

这个信息在TheChaw工作,但可以应用到所有其他支持SSH公钥authentication的git仓库。 (例如,参见gitolite ,gitlab或github。)

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

  • 首先,您需要将CD放入您的.ssh目录。 打开terminal并运行:

    cd ~/.ssh && ssh-keygen

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

这就是你应该好克隆和结帐。

更多信息可以在https://help.github.com/articles/generating-ssh-keysfind(感谢@惠特尼);

更广泛的故障排除,甚至可以通过以下方式自动完成:

 ssh -vT git@github.com 

资料来源: http : //help.github.com/ssh-issues/

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

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

等价的情况是,当您尝试使用SSH URL克隆其他人没有写权限的回购时。

总而言之, 如果您的意图是仅克隆回购,请使用HTTPS URLhttps://github.com/{user_name}/{project_name}.git git@github.com:{user_name}/{project_name}.git )而不是SSH URL( git@github.com:{user_name}/{project_name}.git ),避免(不必要的)公共密钥validation。


更新:GitHub现在将HTTPS显示为默认协议,此举可能可以减less可能的滥用SSH URL。

github的帮助链接帮助我理清了这个问题。 看起来ssh密钥没有被添加到ssh-agent。 这是我最终做的。

命令1:

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

 eval "$(ssh-agent -s)" 

命令2:

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

 ssh-add ~/.ssh/id_rsa 

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

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

要validation您的密钥是否与您的github帐户相关联

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

你应该至less看到一个键,其中一个散列键与你刚刚键入ssh-add -l时看到的散列值中的一个匹配。

如果你不这样做,请添加一个,然后重试。

我有一个轻微的不同的情况,我login到远程服务器,并在服务器上使用GIT,当我运行任何GIT命令我得到了相同的消息

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

我解决这个问题的方法是通过更改我的Mac上的文件/ etc / ssh_config。 从

 ForwardAgent no 

 ForwardAgent yes 

这适用于我:

 ssh-add ~/.ssh/id_rsa 

在Windows上,确保您的所有应用程序都符合HOME。 Msys令人惊讶的不会为你做。 我必须设置一个环境variables,因为ssh和git似乎无法就我的.ssh目录的位置达成一致。

基本的GIT指令没有提到SSH关键的东西。 在上面的一些链接之后,我find了一个git帮助页面,它可以逐步解释如何为各种操作系统做这个工作(链接将会相应地检测你的操作系统和redirect):

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

它遍历了GITHub所需的一切,并给出了详细的解释,例如“为什么在创buildRSA密钥时添encryption码”。 我想我会张贴它,以防其他人帮助…

我遇到了同样的问题,因为我认为SSHHTTPS的区别在于

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

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

所以我从HTTPS更改为SSH只是通过更改https://ssh://没有任何结果的URL被更改。

但事实是:

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

这意味着我改变了ssh://github.com/USERNAME/REPOSITORY.gitgit@github.com:USERNAME/REPOSITORY.git它的工作原理。

愚蠢的错误,但希望可以帮助别人!

最简单的方法之一

去terminal –

  git push <Git Remote path> --all 

你在公司环境 ? 你的系统variables最近是否可能改变了? 根据这个回答,ssh密钥位于%HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa.pub 。 所以如果%HOMEDRIVE%最近改变了,git不知道在哪里寻找你的密钥,从而所有的身份validation的东西。

尝试运行ssh -vT git@github.com 。 记下identity file的位置。 对我来说,这并不是指我的普通\Users\MyLogin ,而是指向一个networking驱动器,因为在networking层面推动了环境variables的变化。

解决scheme? 由于我的新%HOMEDRIVE%与我的本地文件具有相同的权限,所以我只是将我的.ssh文件夹移到那里,并且每天都会调用它。

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

  • type id_rsa.pub | clip

参考文献:

  • 打印到标准输出
  • 将命令行输出复制到剪贴板

我刚刚在设置我的当前项目时遇到过这个问题,上面的解决scheme都没有工作。 所以我尝试使用命令ssh -vT git@github.com查看debugging列表上真正发生的事情。 我注意到我的私钥文件名不在列表中。 因此将私钥文件名重命名为“id_rsa”来完成这项工作。 希望这可以帮助。

伙计们,这是如何为我工作的:

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

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这样的命令,则不会使用您生成的密钥

在这里输入图像描述

在这里输入图像描述

如果您有多个密钥,则可能需要执行ssh-add private-keyfile

它非常简单。 键入下面的命令

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

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

我正在为同样的问题而苦苦挣扎,我能克隆回购。 我按照这些程序为iMac

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

  1. 打开terminal。
  2. inputls -al ~/.ssh以查看是否存在现有的SSH密钥:

检查目录列表,看看你是否已经有一个公共的SSH密钥.Default public是以下其中一个:d_dsa.pub,id_ecdsa.pub,id_ed25519.pub,id_rsa.pub

如果没有find,则转到步骤2,否则按照步骤3

第2步:生成公共SSH密钥

  1. 打开terminal。
  2. inputfollowong命令和你用于github的有效的电子邮件地址ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  3. 您将在terminalGenerating 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]Enter a file in which to save the key (/Users/you/.ssh/id_rsa): [Press enter]再次按回车。 在提示符下,input安全密码。
  4. Enter passphrase (empty for no passphrase): [Type a passphrase]inputEnter passphrase (empty for no passphrase): [Type a passphrase]如果您不想Enter same passphrase again: [Type passphrase again] ,请Enter same passphrase again: [Type passphrase again]inputEnter same passphrase again: [Type passphrase again]再按一次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_rsareplace为现有私钥文件的名称。 input这个命令$ ssh-add -K ~/.ssh/id_rsa

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

  1. 在terminalinput此命令与您的ssh文件名pbcopy < ~/.ssh/id_rsa.pub这将复制文件到您的剪贴板现在打开您github帐户转到设置> SSH和GPG键>新的SSH密钥input标题并粘贴从剪贴板中键入并保存。 你已经完成了。

尝试运行makefile时,我遇到了类似的权限被拒绝(publickey)错误

作为上述SSH步骤的替代scheme,您可以安装适用于Mac应用程序的原生GitHub。

点击下载GitHub for Machttps://help.github.com/articles/set-up-git#platform-mac

一旦你用你的git hub帐户完成设置(我也安装了git hub命令行工具,但是不确定这个步骤是否需要),我收到一封电子邮件 –

[GitHub]新帐号已添加到您的帐户

和我的错误是固定的。

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

我无法创build我自动克隆的目录,而无需使用sudo为git clone命令添加前缀。 当我这样做,但是,我的ssh键没有被正确引用。

为了解决这个问题,我通过chmod在父目录上设置权限,我想包含我的克隆,所以我可以写信给它。 然后我跑了git克隆没有一个sudo前缀。 然后它工作! 之后我改变了权限。 完成。

我得到这个错误,因为我用错误的电子邮件生成的SSH密钥。 我能够连接使用SSH,但不使用GIT。 解决scheme是使用我的github帐户的主要电子邮件地址重新生成密钥。

它为我工作。

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

pbcopy <〜/ .ssh / id_rsa.pub

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

它为我工作

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

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

我按照这里列出的步骤,通过terminalinput密码。 错误,也就是混淆的GUI界面,已经解决了。 请参阅: https : //askubuntu.com/questions/3045/how-to-disable-gnome-keyring

在我的情况下,我已经重新安装了Ubuntu并且用户名称从之前改变。 在这种情况下,生成的ssh密钥也与上一个不同。

这个问题只需将当前的ssh公钥复制到版本库中即可解决。 密钥将在用户的/home/.ssh/id_rsa.pub

在我的MAC我解决这个:

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

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

我认为这是一个错误。

我可以find这个行为运行ssh -vT git@github.com

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

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

我能够通过以下步骤在我的Ubuntu系统中解决这个问题。 正如我正在试验无密码的SSH系统。

sudo vi / etc / ssh / sshd_config

1)评论如下:#更改为no以禁用隧道式明文密码#PasswordAuthentication yes PasswordAuthentication no —->对此进行评论。

2)然后重新启动sshd守护进程如下。

服务sshd重启

适用于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密钥 – >input密钥的名称(可以是任意)并粘贴密钥来描述)。
 $ cd ~ $ cd .ssh $ chmod 400 id_rsa