Heroku“权限被拒绝(公钥)致命:无法从远程存储库读取”的困扰


139

我经过数小时的搜寻,终于找到了看似容易解决的问题的解决方案。这并不是说我的搜索没有发现任何问题,而是因为我的搜索显示了很多不同的解决方案,但都没有奏效。

无论如何,我根本无法从Mac从Heroku存储库中推入,拉出或获取。每次尝试都会给我(好像在嘲笑我)以下错误:

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

我已经尝试(并再次尝试)以多种不同方式对其进行修复。正如我所说的,过去两天中,我花了大量时间在寻找答案。这是我尝试过的一些方法:

  • heroku键:清除,然后是heroku键:添加
  • 使用'ssh-keygen -t rsa'自己重新生成ssh密钥
  • 清除我的.ssh目录,然后清除heroku键:清除,然后生成ssh键
  • 在heroku上删除我的应用,然后重新创建一个(很幸运,那里没有很多)

我可以从GitHub存储库中很好地获取数据,所以我知道它不是网络连接(ping heroku也可以)。

作为一种临时解决方案(希望不会成为永久解决方案),我已经登录到我的Ubuntu Amazon AWS ec2实例。从Heroku上拉出和推入效果很好。因此,我仍然觉得问题出在Mac上的ssh键上。这两个键都显示在我的Heroku帐户下。密钥末尾的电子邮件地址有关系吗?

编辑:我可以很好地从GitHub推入和拉出(但是我不使用ssh),所以为什么不使用Heroku?

在这一点上,我愿意尝试任何事情。谢谢!


您是否在heroku密钥上设置了密码?而且我想这(stackoverflow.com/a/16753800/6309)没有帮助吗?或
仔细

可悲的是它仍然拒绝工作。
thebradbain 2013年

有时在heroku维护时会发生这种情况:status.heroku.com
Mavis

Answers:


284

我知道这已经得到回答。但是,我想添加我的解决方案,因为它将来可能会对其他人有所帮助。

常见的密钥错误是:Permission denied (publickey)。您可以通过使用keys:add新密钥通知Heroku 来解决此问题。

简而言之,请执行以下步骤:https : //devcenter.heroku.com/articles/keys

首先,如果您没有密钥,则必须创建一个密钥:

ssh-keygen -t rsa

其次,您必须将密钥添加到Heroku:

heroku keys:add

2
感谢kris,未来的某人:)这对我
有用

8
heroku keys:我猜是我的教程遗漏了……谢谢!:)
Ole HenrikSkogstrøm13年

仅当您没有一个密钥时才需要生成密钥,在我的情况下,我已经拥有密钥并且只需要将密钥添加到heroku
joseramonc 2014年

4
第一个是不必要的。heroku keys:add如果您没有钥匙,将帮助您创建一个。
Mygod 2015年

ssh-keygen -t rsa如果RSA未生成,则运行,否则heroku keys:add就足够了
Volatil3

122

我只是以为我会找到自己问题的答案。

写出我的问题让我更加清楚,然后我进一步调查了我认为问题出在哪里:ssh密钥

原来我是对的。问题不在于密钥本身,而是我没有将其添加到本地Mac的已知ssh密钥列表中。因此,即使我的Heroku帐户上传了正确的密钥,我的Mac也无法对其进行身份验证,因为它无法在计算机上找到该密钥。解决方案?

ssh-add ~/.ssh/id_rsa
#and, to confirm it's been added to the known list of keys
ssh-add -l

我想感谢https://help.github.com/articles/error-permission-denied-publickey作为很好的参考。


5
感谢您的反馈,它对您的情况比我最初的评论更为准确。+1
VonC

4
在Windows上,将需要启动Git Bash(右键单击一个文件夹),然后ssh-agent通过运行`ssh-agent`(注意向后提示)启动一个,然后如上所述添加密钥。每次启动Git Bash/时ssh-agent,都必须这样做,它会忘记添加的内容。
TWiStErRob 2013年

我这样做了,但还是没用。我最终不得不将名为HOME的环境变量添加到我的.ssh文件夹所在的目录中
Justin

谢谢-永远不会想到这一点!
Mark Hansen 2014年

这解决了我的问题,而不是较高的投票答案,谢谢:)
Ryan Brodie

31

我有完全相同的错误(在Windows 7上),原因不同。我以不同的方式解决了问题,所以我想在这里为其他人添加原因和解决方案。

即使错误似乎指向heroku,但错误实际上是在说"Heroku can't get to the git repository"。我发誓我在所有服务器上都拥有相同的密钥,因为我创建了它并同时将它上载到另一个上。

在花了将近一天的时间后,我意识到,因为git仅显示指纹而不是实际密钥。我无法验证它的密钥是否与我的HD或heroku上的密钥匹配。我查看了已知的主机文件,然后猜出了什么……它显示了每个服务器的密钥,并且我能够清楚地看到git和heroku公钥不匹配。

1)我删除了我的密钥文件夹中的所有文件,使用其网站从github的密钥,以及使用git bash和命令从heroku删除的密钥 heroku keys:clear

2)按照github的指示在此处生成一个新的密钥对并将公钥上传到git

3)使用git bash- heroku keys:add 将相同的密钥上传到heroku。

现在git push heroku master可以使用了。

真是一场噩梦,希望这对某人有所帮助。

布赖恩


1
直到我看到你的帖子,我的脑子才碎了。一旦我使git和heroku键相同,一切就很好了。但是不明白为什么它们需要相同。
Kishore Masand

感谢您为这个问题花了很长时间的答案
Ivan Bacher 2013年

非常有用的git文档链接,所有功能都完美无缺
HotJard 2013年

经过几天的尝试,对我来说这很有效。我很惊讶Heroku会因为这种令人讨厌的可用性问题而继续营业。应该有一个更简单的方法可以做到这一点。
Luke F.

谢谢。为我工作;只是一件事:在github链接中某处说要执行“ ssh-add”。在那里,我有一个问题,但我发现这里的解决方案:stackoverflow.com/questions/17846529/...
阿林Ciocan

17

我遇到的问题是,我只对我的GitHub帐户使用https。我需要确保为ssh访问设置了我的GitHub帐户,并且GitHub和heroku都使用相同的公钥。这些是我采取的步骤:

  1. 导航到〜/ .ssh目录,并删除id_rsa和id_rsa.pub(如果存在)。我从新键开始,尽管可能没有必要。

    $ cd ~/.ssh
    $ rm id_rsa id_rsa.pub
    
  2. 按照gitHub上的步骤生成ssh密钥
  3. 登录到heroku,创建一个新站点并添加公共密钥:

    $ heroku login
    ...
    $ heroku create
    $ heroku keys:add
    $ git push heroku master
    

6

我在linux ubuntu上有相同的情况,只是修复了它,似乎OS在/root/.ssh/和home / user / .ssh / dir之间混淆了,我所做的是:

  1. 从根目录和home / user .shh目录中删除了所有密钥。
  2. 生成一个新密钥确保注意创建路径(/home/you/.ssh/id_rsa)或(/root/.ssh/id_rsa)
  3. 检查heroku键 heroku keys
  4. 如果那里的钥匙很清楚 heroku keys:clear
  5. heroku keys:add 现在在这里,如果heroku找不到密钥并要求生成一个正确的否,这意味着您与我的问题相同,请执行如下add命令 heroku keys:add /root/.ssh/id_rsa.pub的,您将添加的路径就是您得到的那个在第2步中
  6. git push heroku master现在尝试

3

我在Windows 8上的方式

  1. 将带有ssh-keygen的目录添加到系统PATH变量中,通常是C:\ Program Files(x86)\ Git \ bin

  2. 打开CMD,转到C:\ Users \ Me \

  3. 生成SSH密钥 ssh-keygen -t rsa

    输入要在其中保存密钥(//.ssh/id_rsa)的文件:.ssh / id_rsa(将默认的错误路径更改为.ssh / somegoodname_rsa)

  4. 将密钥添加到Heroku heroku keys:add

    从列表中选择一个创建的密钥

  5. 转到您的应用目录,编写一些漂亮的代码

  6. 初始化一个git仓库 git init git add . git commit -m 'chore(release): v0.0.1

  7. 创建Heroku应用程序 heroku create

  8. 部署您的应用 git push heroku master

  9. 打开你的应用 heroku open


2

遇到了类似的问题,并尝试了很多事情。最终,对我有用的是在Windows上安装了Gnu(https://github.com/bmatzelle/gow/releases),并确保它使用的是该目录中的ssh工具,而不是使用带有Git的工具。安装完成后,请使用(确保其在环境PATH中是否位于Git \ bin之前)进行测试

C:\Git\htest2>which ssh
C:\Program Files (x86)\Gow\bin\ssh.BAT

我按此处所述使用腻子和选美剂:http : //rubyonrailswin.wordpress.com/2010/03/08/getting-git-to-work-on-heroku-on-windows-using-putty-plink-pageant/

密钥发送到heroku之后(heroku密钥:添加c:\ Users \ Person.ssh \ id_rsa.pub),请使用

ssh -v <username>@heroku.com 

并确保您的堆栈显示使用腻子-即工作堆栈:

Looking up host "heroku.com"
Connecting to 50.19.85.132 port 22
Server version: SSH-2.0-Twisted
Using SSH protocol version 2
**We claim version: SSH-2.0-PuTTY_Release_0.62**
Using Diffie-Hellman with standard group "group1"
Doing Diffie-Hellman key exchange with hash SHA-1
Host key fingerprint is:
ssh-rsa 2048 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad
Initialised AES-256 SDCTR client->server encryption
Initialised HMAC-SHA1 client->server MAC algorithm
Initialised AES-256 SDCTR server->client encryption
Initialised HMAC-SHA1 server->client MAC algorithm
Pageant is running. Requesting keys.
Pageant has 1 SSH-2 keys
Using username "*--ommitted for security--*".
**Trying Pageant key #0**
Authenticating with public key "rsa-key-20140401" from agent
Sending Pageant's response
Access granted
Opened channel for session
Server refused to allocate pty
Server refused to start a shell/command
FATAL ERROR: Server refused to start a shell/command

之前运行但失败的一个:

C:\Git\htest2>ssh -v <username>@gmail.com@heroku.com
OpenSSH_4.6p1, OpenSSL 0.9.8e 23 Feb 2007
debug1: Connecting to heroku.com [50.19.85.156] port 22.
debug1: Connection established.
debug1: identity file /c/Users/Person/.ssh/identity type -1
debug1: identity file /c/Users/Person/.ssh/id_rsa type 1
debug1: identity file /c/Users/Person/.ssh/id_dsa type -1
debug1: Remote protocol version 2.0, remote software version Twisted
debug1: no match: Twisted
debug1: Enabling compatibility mode for protocol 2.0
**debug1: Local version string SSH-2.0-OpenSSH_4.6**
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: server->client aes128-cbc hmac-md5 none
debug1: kex: client->server aes128-cbc hmac-md5 none
debug1: sending SSH2_MSG_KEXDH_INIT
debug1: expecting SSH2_MSG_KEXDH_REPLY
debug1: Host 'heroku.com' is known and matches the RSA host key.
debug1: Found key in /c/Users/Person/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: SSH2_MSG_SERVICE_REQUEST sent
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey
debug1: Next authentication method: publickey
debug1: Trying private key: /c/Users/Person/.ssh/identity
debug1: Offering public key: /c/Users/Person/.ssh/id_rsa
debug1: Server accepts key: pkalg ssh-rsa blen 277
debug1: Trying private key: /c/Users/Person/.ssh/id_dsa
debug1: No more authentication methods to try.
Permission denied (publickey).

只是说这是使用Windows 8(8.1)。似乎GoW ssh工具也是关键,因为我能够在没有腻子的情况下使用它,并使用ssh-keygen。
user3484361 2014年

2

您需要通过键入以下命令来创建新的ssh密钥-ssh-keygen -t rsa

然后,您需要添加:-heroku键:添加

然后,如果您键入-heroku打开

问题已解决。

无论如何,它对我有用,您可以尝试一下...


2

我遇到了同样的错误,并且因为我有4个ssh键,所以我尝试按照以下步骤操作:

ssh-keygen -t rsa
heroku keys:add

然后,显示四个选项:

1) github_rsa.pub
2) id_boot2docker.pub
3) id_rsa.pub
4) sshkey.pub

我选择3),最新的一种

然后,我修复了错误。


1

我用这种方法解决了这个问题,也许你可以尝试一下

“启用ssh代理”

  1. 下载git

http://git-scm.com/

  1. 安装它

  2. 启用ssh-agent

C:\ Program Files \ Git \ cmd

启动SSH代理

我代理启用后的消息分发器希望这会对您有所帮助


1

我想添加另一个解决方案,因为我在这里没有看到它。我的问题是heroku链接到错误的URL(因为我一直在使用URL名称)。编辑远程URL解决了我的问题:

git remote set-url heroku <heroku-url-here>

0

我遇到过同样的问题。正如所有人都说的那样,我试图重置我的钥匙,但仍然没有成功。因为是因为我将应用程序重命名。

因此,我要做的是重置我的密钥,并从控制台重命名应用。检查此问题以获取更多信息:Heroku推送应用程序问题


0

因此,如此简单的解决方案,请转到c:/Users/user_name/.ssh/并删除所有pub /私钥对,这样heroku会为您生成密钥。


0

我遇到了无法解决的类似的heroku ssh错误。

解决方法是,我使用了新的heroku http-git功能(“ heroku”远程而不是ssh的http传输)。此处的详细信息:https : //devcenter.heroku.com/articles/http-git

(简短版本:如果您已经以标准方式设置了项目,请运行heroku git:remote --http-init将“ heroku”远程更改为http。)

如果您没有时间解决ssh问题/对其进行故障排除,可以快速解决此问题。


就我而言,问题似乎与ssh远程路径中的“:”有关。(GIT 1.9.4适用于Windows)。出于某种原因,SSH:// @ git的主持人:回购失败, “致命的:无法从远程存储库中读取”,而SSH:// @ git的主机/回购”成功
FullTimeCoderPartTimeSysAdmin
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.