2013-07-13 43 views
132

我已经搜索了很多小时,最终寻找解决方案来解决我看似容易修复的问题。这并不是说我的搜索没有任何结果,而是我的搜索出现了许多不同的解决方案 - 其中没有一个能解决问题。Heroku的权限被拒绝(publickey)致命:无法从远程存储库中读取信息

无论如何,我无法从我的Mac上的Heroku存储库中进行推,拉或取。每一个试图给我(就好像它是在嘲笑我)以下错误:

'Permission denied (publickey). fatal: Could not read from remote repository.'

我试过(和重新尝试过)来修复它在许多不同的方式。正如我所说的,在过去的两天里,我花了大量时间寻找答案。下面是一些我尝试过的事情:

  • Heroku的关键:明确之后的Heroku键:添加
  • 再生对我自己的SSH密钥以“ssh-凯基-t RSA”
  • 结算我的.ssh目录,其次是Heroku的按键:清楚,然后生成一个SSH密钥
  • 删除在Heroku我的应用程序并重新创建一个(幸好没有多少是在那里)

我可以从我的GitHub取存储库很好,所以我知道它不是n网络连接(pinging heroku也可以)。

作为一个临时解决方案(我希望不会变成永久解决方案),我已登录到我的Ubuntu Amazon AWS ec2实例。从Heroku拉出和推出完美。出于这个原因,我仍然觉得问题在于我的Mac上的ssh密钥。这两个键都显示在我的Heroku帐户下。关键问题最后的电子邮件地址是否?

编辑:我可以推拉从GitHub罚款(但我不使用ssh,所以为什么不Heroku?

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

+0

您是否为您的heroku密钥设置了密码短语?我想这(http://stackoverflow.com/a/16753800/6309)没有帮助?或者双重检查http://stackoverflow.com/a/16753800/6309 – VonC

+0

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

+0

有时候这种情况发生在heroku处于维护状态时:https://status.heroku.com/ – Mavis

回答

120

我只是想我会分享我发现我自己的问题的答案。

写出我的问题,使其更清楚地知道,我进一步调查到这里,我想我的问题奠定: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作为一个很好的参考。

+4

感谢您的反馈,比我的初步评论更准确。 +1 – VonC

+0

谢谢你!这帮了我很多! – ugiflezet

+4

在Windows上,需要启动'Git Bash'(右键单击一个文件夹),并通过运行''ssh-agent \''启动一个'ssh-agent'如上所述添加密钥。每次我开始'Git Bash' /'ssh-agent'时都必须这样做,它忘记了所添加的内容。 – TWiStErRob

266

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

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

总之请按照下列步骤操作:https://devcenter.heroku.com/articles/keys

首先,你必须创建一个关键,如果你没有一个:

ssh-keygen -t rsa 

其次,你必须将键添加到Heroku的:

heroku keys:add 
+1

谢谢克里斯,从未来的一些:)这对我的作品 –

+8

heroku键:添加是我的教程错过了我猜...谢谢! :) –

+0

作品,非常感谢。 – Zhaonan

31

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

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

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

1)我删除了所有的文件在我的钥匙夹,使用他们的网站从GitHub的关键,而使用Git的bash从Heroku的关键和命令heroku keys:clear

2)其次GitHub的指示here生成一个新的密钥对并将公钥上传到git

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

现在git push heroku master的作品。

真是一场恶梦,希望这有助于某人。

布莱恩

+1

在我看来你的帖子之前绞尽脑汁。只要我把git和heroku键一样,一切都很好。但不明白他们为什么需要相同。 –

+0

谢谢你用这个问题度过的年龄的问题 – BuildingJarl

+0

非常有用的git文档链接,所有作品都很完美 – HotJard

17

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

  1. 导航到〜/ .ssh目录,并删除id_rsa和id_rsa.pub,如果它们的存在。我从新钥匙开始,但可能没有必要。

    $ cd ~/.ssh 
    $ rm id_rsa id_rsa.pub 
    
  2. 按照GitHub上的步骤generate ssh keys
  3. 登录Heroku的,创建一个新的网站,并添加公钥:

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

也有类似的问题,并试图地段东西的。最终,对我有用的是,在Windows上安装了Gnu(https://github.com/bmatzelle/gow/releases),并确保它使用该目录中的ssh工具,而不是使用Git。与一旦安装测试(确保如果在这preceds的Git \ BIN环境PATH)

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:\用户\ 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>@[email protected] 
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). 
+0

只是说这是使用Windows 8(8.1)。也似乎GoW ssh工具是关键,因为我能够使用没有腻子的部分,并使用ssh-keygen。 – user3484361

3

我的方式在Windows 8

  1. 使用ssh-凯基一个目录添加到系统PATH变量,通常是C:\ Program Files文件(86)\ Git的\ BIN

  2. 打开CMD,进入C:\用户\我\

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

    输入文件中保存密钥(//.ssh/id_rsa)的.ssh/id_rsa (更改默认不正确路径的.ssh/somegoodname_rsa)

  4. Add the key to Herokuheroku keys:add

    从列表中选择

  5. 转到您的应用程序目录中创建的密钥,写一些漂亮的代码

  6. INIT一个git回购git initgit add .git commit -m 'chore(release): v0.0.1

  7. Create Heroku applicationheroku create

  8. 部署应用程序git push heroku master

  9. 打开应用heroku open

0

我有同样的问题。正如大家所说,我试图重置我的密钥,但它仍然没有奏效。因为我改名了应用程序。

所以我所做的是重置我的密钥,并从控制台重命名应用程序。检查这个问题的详细资料:Heroku push app problem

1

我用这个方法来解决这个问题 也许你可以试试

“启用SSH代理”

  1. 下载混帐

http://git-scm.com/

  1. 安装它

  2. 启动SSH代理

C:\ Program Files文件\的Git \在cmd

启动的ssh-agent

后,我代理的消息即消失启用 希望这会帮助你

2

你需要通过输入以下内容来创建一个新的ssh密钥 - SSH-凯基-t RSA

然后你需要添加: - Heroku的键:添加

然后,如果你键入 - Heroku的开放

的问题已经解决。

反正工作对我来说,你可以试试看......

0

非常非常非常非常简单的解决方案,转至c:/Users/user_name/.ssh/并删除所有的pub /私钥对,这样heroku会为你生成密钥。

5

我对Linux操作系统Ubuntu相同的情况下,只是固定它,它似乎在OS的/root/.ssh/和家庭/用户/的.ssh /目录之间的困惑,我所做的就是:

  1. 删除root和home/user .shh目录中的所有密钥。
  2. generated a new key一定要注意创建(/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现在
0

我有一个类似的heroku ssh错误,我无法解决。

作为一种解决方法,我使用了新的heroku http-git功能(http传输为“heroku”,而不是ssh)。详情点击这里:https://devcenter.heroku.com/articles/http-git

(短版:如果你已经有一个项目设置的标准方式,运行的Heroku的git:远程--http-init改变“Heroku的”远程访问http)

一个好的快如果您没有时间修复/排除ssh问题,请解决。

+0

就我而言,这个问题似乎与ssh远程路径中的“:”有关。 (Git 1.9.4 for windows。)出于某种原因,ssh:// git @ host:repo失败,并且“sall:// git @ host/repo”成功,致命:无法从远程存储库读取数据。 – FullTimeCoderPartTimeSysAdmin

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)时,最新的一个

然后,我修复了错误。

0

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

git remote set-url heroku <heroku-url-here> 
相关问题