GitHub:权限被拒绝(公钥)。致命:远端意外挂断


197

我已经按照下面的说明上传了一个项目。

全局设置:

 Download and install Git
  git config --global user.name "Your Name"
  git config --global user.email tirenga@gmail.com
  Add your public key


Next steps:

  mkdir tirengarfio
  cd tirengarfio
  git init
  touch README
  git add README
  git commit -m 'first commit'
  git remote add origin git@github.com:tirenga/tirenga.git
  git push origin master

但是我得到这个错误:

权限被拒绝(公钥)。致命:远端意外挂断

Answers:


24

对我来说,问题是通过sudo执行克隆。

如果克隆到具有用户权限的目录(/ home / user / git),它将正常工作。

(说明:以超级用户身份运行命令不能与以用户身份运行命令使用相同的公钥。因此,Github拒绝了连接。)

此解决方案需要已设置SSH密钥:https : //help.github.com/articles/generating-ssh-keys


1
此解决方案似乎与Learner_19
Erik

125

我必须将我的公钥添加到github。https://help.github.com/articles/generating-ssh-keys


3
如果您正在运行linux计算机,则在使用emacs或nano时,很难复制id_rsa.pub文件的内容。尝试使用文本编辑器进行复制(记事本,TextEdit或gedit可以正常工作)。如果您没有这些,则可以使用vim。
Gokul NK 2012年

4
@GokulNK另一种选择是按照页面的建议使用xclip。
w4etwetewtwet

7
cat ~/.ssh/id_rsa.pub可能是一个选择?:p
torr 2013年

您可以pbcopy < ~/.ssh/id_rsa.pub在OS X中使用它,然后将其(cmd+v)粘贴到github页面中。
user3648895 '17


28

创建RSA密钥对后,必须使用以下命令将其添加到SSH:

ssh-add ~/.ssh/id_rsa

或您创建rsa密钥对的任何位置。


救命!你击中了要害。谢谢
Tash Pemhiwa '16

同意,重要的是首先检查ssh-agent是否正在运行(GitHub的文档已执行此操作),以及是否在密钥环中添加了密钥。不过,还有其他值得检查的事情,因为即使在ssh-agent的密钥环中,它也可能会阻止密钥的使用,这是私钥的正确访问模式:它应该是0600(chmod 600 ~/.ssh/id_rsa,基本上)。
chikamichi

18

使用用户名和存储库名称键入以下命令:

git clone https://github.com/{user name}/{repo name}

在Ubuntu中,这非常完美。


我认为https协议需要具有安全的连接,这就是它起作用的原因。Git @ github ..对于机器不是安全的。
Timo 2014年

16

经过很长时间的教程后,我得到了一个解决方案。

我按照此链接上的github教程-> https://help.github.com/articles/error-permission-denied-publickey进行操作,并能够在每个步骤中进行连接。但是当我尝试git push -u origin master时,出现此错误:

权限被拒绝(公钥)。致命:无法从远程存储库读取。

请确保您具有正确的访问权限

那就是我修理的方法!! 使用终端转到项目目录并签出

$git remote -v

您将获得如下内容:

origin  ssh://git@github.com/yourGithubUserName/yourRepo.git (fetch)
origin  ssh://git@github.com/yourGithubUserName/yourRepo.git (push)

如果您使用的是git@github.com以外的其他方式,请输入以下命令在git目录中打开配置文件:

vi .git/config

并配置线

[remote "origin"]

url = ssh://git@github.com/yourGithubUserName/yourRepo.git

fetch = +refs/heads/*:refs/remotes/origin/

对我来说,它实际上是通过将git@github.com替换为<myusername> @ github.com来工作的
Eduard Feicho 2014年

“ git remote -v”命令不是我以前见过的命令,它成为了解为什么我的一个存储库工作正常而另一个在我返回“权限被拒绝(公共密钥)”的原因时的关键尝试运行“ git ls-remote”。很有用。谢谢。
凯文(Kevin)

6

就我而言,我必须为另一个用户设置公共密钥,因为我已经为主要用户设置了一个。切换用户并执行上面链接中的命令后,我就可以毫无问题地为测试服务器执行设置。


相似的问题-我以root用户身份登录(并忽略了此身份),而不是以SSH设置的实际用户身份登录。无法做出任何努力的承诺。改回以解决用户解决的问题!
理查德·霍利斯

1
绝对缺乏有关如何实际执行此修复程序的解释。
理查德

我不必讲清楚,这是给你的Richard ,!我正在使用我的非root帐户。我必须从github帮助url(help.github.com/articles/generating-ssh-keys#platform-linux使用sudo前缀)执行命令。
Dan Power

5

我遇到了这个问题,但是以上解决方案均无效。我可以克隆并获取,但不能推送。最终,我发现问题出url在我的中.git/config,应该是:

git@github.com:<username>/<project>

(不是ssh://github.com/<username>/<project>.githttps://github.com/<username>/<project>.git)。


2
对于SSH连接,关键git@在于魔术。因此ssh://git@github.com/username/project.git也可以。
主教

.git非常重要。该解决方案非常有效。
OnurGöker'16

5

鉴于这里没有答案对我有用,我最终使用ssh -vT git@bitbucket.org跟踪了与Bitbucket(或Github,在这种情况下没有关系)的连接问题。

就我而言,失败是由于使用DSA密钥而不是RSA,显然我的SSH客户端不再允许这样做。

debug1:跳过不在PubkeyAcceptedKeyTypes中的ssh-dss密钥/c/Users/USER/.ssh/id_dsa

解决方案是将其添加到.ssh / config中:

Host *
    PubkeyAcceptedKeyTypes +ssh-dss

优雅地将ssh-dss密钥类型附加到所有现有的公认公钥类型上,完成后,git现在可以ssh到Bitbucket中了。


这是2015年12月在Debian不稳定计算机上为我提供的解决方案。我将其限制为“ Host bitbucket.org”,因为我已经有一个条目可以强制选择我的身份。
bitmusher

3

我的问题是,每次输入时,我都试图为ssh键指定一个特定名称ssh-keygen在Mac终端上。

我仅保留了“ ssh-keygen”生成=的名称就解决了这个问题id_rsa。您最终将在Mac上的.ssh文件夹中有2个密钥id_rsa,这是您的私钥,而id_rsa.pub这是您的公钥。然后,我将代码复制并保存id_rsa.pub到我的GitHub帐户设置中,就是这样。问题解决了。


我也是。将名称保留为空可解决此问题。谢谢。
伯克

伙计,你做了我的一天!由于特定的键名,使用控制台需要2周!谢谢!
eilas

很高兴它有所帮助!@eilas
paopao

这部作品的原因是因为大多数系统默认的私钥(~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/identity)被自动添加到SSH认证代理。
maffo


2

解决方案是添加公用密钥。生成ssh密钥:https : //help.github.com/articles/generating-ssh-keys 包含逐步说明。

但是,如果未以正确的方式生成密钥,则该问题可能会继续存在。我发现这也是一个有用的链接:https : //help.github.com/articles/error-permission-denied-publickey

就我而言,问题是我在不使用sudo的情况下生成了ssh-key,但是在使用git命令时,我需要使用sudo。上面的链接中的注释:“如果不使用sudo生成SSH密钥,那么当您尝试使用sudo git push之类的命令时,将不会使用所生成的SSH密钥。” 帮助过我。

因此,解决方案是我必须将sudo与密钥生成命令和git命令一起使用。或者对于其他人,当他们在任何地方都不需要sudo时,请不要在两个步骤中的任何一个中使用它。(密钥生成和git命令)。


1

在Windows中运行SSH或Git Clone时,我遇到了类似的问题。以下发现有助于解决我的问题:

  • 当您运行“ rhc setup”或其他ssh方法生成ssh密钥时,它将在您的主文件夹的.ssh文件夹中创建私钥文件id_rsa,默认值为C:\ User \ UserID
  • Windows的Git在其安装目录中有其自己的.ssh文件夹。当您运行git / ssh时,它将在此文件夹中查找私钥文件id_rsa。
  • 通过将id_rsa从主文件夹.ssh文件夹复制到git安装目录中的.ssh文件夹来解决此问题

另外,我认为有一种方法可以“告诉” git使用主文件夹中的默认.ssh文件夹,但仍然需要弄清楚如何。


1

对我来说,它像这样工作:

在GitHub中,我将ssh链接更改为https,然后提供了以下命令:

$ git init
$ git remote add origin https:...
$ git add .
$ git commit -m "first commit"
$ git push origin master

0

在Windows Store上使用Ubuntu

适用于Linux的Windows子系统

,您的git push将可在不同的帐户中使用。


0

如果您使用的是Linux计算机,请检查,

  • 你安装了Openssh吗
  • 如果这样做,那么您是否已有一个公共密钥,否则必须生成一个。
  • 是您的公共密钥添加到您的github帐户。

生成新的SSH密钥并将其添加到我的Github帐户解决了我的问题。您可以查看此页面以获取更多详细信息。GitHelp


0

您可以尝试将类型连接更改为从ssh分支到https。

  1. nano project_path/.git/config
  2. 替换git@github.com:username/repository.githttps://username@github.com/username/repository_name.git
  3. 保存文件ctrl+o

之后,您可以尝试git pull不使用公钥



-1

如果使用Mac,解决此问题的快速方法是退出OSX应用并重新登录。


-1

我的问题是我的私钥上的密码短语不起作用。

希望能对某人有所帮助。



-3

我尝试了提到的解决方案,但仍然失败。我找到了最终对我有用的解决方案-删除然后重新添加远程链接


-4

我在Windows上遇到了同样的问题。我从SSH切换到HTTPS,然后运行Git PUSH。

git push -u origin master
Username for 'https://github.com': <Github login email>
Password for <Github login>: xxx

成功!希望这可以帮助。


尽管这可能是一种解决方法,但它不能解决最初的问题。
maffo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.