7

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

我在另一台计算机上浏览了整个 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指纹

我尝试完全删除 .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

4 回答 4

7

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

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

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 应该能够毫无问题地连接。:)

于 2012-12-04T22:05:13.443 回答
4

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

首先,根据这篇文章,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    

其次,根据对本文的回答,在对 ssh 密钥进行故障排除的过程中,应用名称发生了某种变化。应用名称必须在 /repository_folder/.git/config 中手动编辑

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

它包含

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

感谢所有发布的建议!我很高兴终于踏上了开发新应用的道路!

- 更新 -

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

于 2012-12-09T03:28:30.387 回答
2

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

示例(~/.ssh/config):

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

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

干杯

于 2012-11-29T03:08:01.203 回答
0

.ssh目录和存储库目录的权限都是 555

ssh 连接的重要因素是组和其他权限

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

(将 /home/user 替换为您的主目录的实际路径)

这个想法是组和其他属性权限.ssh 及其所有父目录都不能是可写的。

555.ssh 很好,虽然建议使用 700
检查其父目录: 755 或 555 一直到/(没有“2”、“3”或“6”,表示组或其他的可写目录)。

于 2012-12-01T19:54:19.690 回答