尽管有效的SSH密钥,但无法将git repo推送到Heroku

时间:2012-11-22 20:28:53

标签: git heroku

有很多堆文章引用了与我相同的错误消息。

我在另一台计算机上浏览了整个heroku设置文档,一切都运行良好。不知道为什么这个不起作用,但我需要它。

当我跑步时:

> git push -v heroku master

Pushing to git@heroku.com:lit-tor-7969.git
Permission denied (publickey).
fatal: The remote end hung up unexpectedly

Stack上的所有解决方案都涉及重置ssh密钥,我相信ssh密钥很好。我在Mac OSX上运行:

heroku keys:clear
heroku keys:add

因此我觉得git使用/Users/bishopz/.ssh键而不是我在存储库文件夹中手动生成的键。

除了以下答案之外,本文似乎提供了很多见解: Cannot push to Heroku because key fingerprint

我尝试完全删除.ssh目录。我跑了

heroku keys:clear
ssh-add -D #to remove all ssh identities
ssh-keygen -t rsa -C "email@gmail.com" -f  ~/.ssh/id_rsa_heroku
ssh-add ~/.ssh/id_rsa_heroku
heroku keys:add ~/.ssh/id_rsa_heroku.pub
git push heroku master

现在得到:

!  Your key with fingerprint 27:5f:64:4e:2e:f0:41:5b:62:a9:95:d2:02:df:27:85 is not authorized to access lit-tor-7969.
fatal: The remote end hung up unexpectedly

的回应
ssh -vvv git@heroku.com

现在是:

debug1: Host 'heroku.com' is known and matches the RSA host key.
debug1: Found key in /Users/bishopz/.ssh/known_hosts:1
debug1: ssh_rsa_verify: signature correct
debug1: Offering RSA public key: /Users/bishopz/.ssh/id_rsa_heroku
debug1: Server accepts key: pkalg ssh-rsa blen 279
debug1: Authentication succeeded (publickey).
Authenticated to heroku.com ([50.19.85.132]:22).

任何帮助表示赞赏,如果有人能发布适合我的答案,我会开始新的赏金。

4 个答案:

答案 0 :(得分:7)

这个问题并不是关于git而是关于ssh。 :)

Heroku使用git,它使用ssh,只允许通过publickey进行身份验证。 (但我认为这已经很明确了。)

heroku keys:add会将公钥发送到heroku。除非您指定显式密钥,否则它将使用~/.ssh/id_[rd]sa.pub

要成功验证,您需要提供匹配的私钥。除非另有说明,否则ssh将使用~/.ssh/id_[rd]sa,但如果权限太松,它将拒绝读取它。 (有关详细信息,请参阅man ssh部分文件。)

检查权限是否正常的简单方法是将密钥添加到代理: ssh-add ~/.ssh/id_[rd]sa

这应该将密钥添加到代理(使用ssh-add -L验证)或抱怨错误的权限。 (如果首先没有代理运行,您可以使用'ssh-agent bash'启动代理。)

将密钥添加到代理后,代理将负责身份验证,并且您的git应该能够正常连接。 :)

答案 1 :(得分:4)

好的,我能够解决它。其中一些答案很有帮助。似乎发生了两件事。

首先,基于this article,ssh键已经混淆了。这是通过删除.ssh目录解决的(当然这删除了使用.ssh的其他内容的所有凭据,但是可以在以后重新创建):

heroku keys:clear
ssh-add -D #to remove all ssh identities
ssh-keygen -t rsa -C "email@gmail.com" -f  ~/.ssh/id_rsa_heroku
ssh-add ~/.ssh/id_rsa_heroku
heroku keys:add ~/.ssh/id_rsa_heroku.pub    

其次,基于对this article的回答,在对ssh密钥进行故障排除的过程中,应用名称发生了某些变化。必须在/repository_folder/.git/config

中手动编辑应用名称

要获取正确的应用名称,我在网上登录了heroku.com,然后更新了配置文件:

它包含

[remote "heroku"]
    url = git@heroku.com:my_new_app_name.git
    fetch = +refs/heads/*:refs/remotes/heroku/*

感谢所有发布的建议!我很高兴最终能够去一个新的应用程序!

- UPDATE -

每次重新启动计算机时都必须重新运行此命令。我可以将它添加到我的.profile或其他任何内容,但我认为值得注意。

答案 2 :(得分:2)

取决于您的设置。 您可能在〜/ .ssh /目录中有一个配置文件,用于设置在推送到heruko时要用作公钥的文件。

示例(~/.ssh/config):

Host 127.0.0.1 #Use Heroku's IP
IdentityFile ~/.ssh/use_this_key

如果是这种情况,请更改〜/ .ssh / config文件中的设置

干杯

答案 3 :(得分:0)

  

.ssh目录和存储库目录的权限均为555

ssh连接的重要性是:group and other permissions

  • /home/user/.ssh
  • /home/user
  • /home

(用主目录的实际路径替换/ home / user)

我们的想法是.ssh 及其所有父目录的组和其他属性权限必须不可写

555适用于.ssh,虽然700 is recommended 检查其父目录:755或555一直到/(没有'2','3'或'6',表示组或其他的可写目录。)