【问题标题】:Unable to push git repo to Heroku, despite valid SSH keys尽管 SSH 密钥有效,但无法将 git repo 推送到 Heroku
【发布时间】:2012-11-11 06:12:53
【问题描述】:

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

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

感谢任何帮助,如果有人可以发布适合我的答案,我将开始新的赏金。

【问题讨论】:

  • 您确定将密钥添加到正确的帐户吗?也许您登录了错误的 Heroku 帐户。也许试试heroku login
  • 你对 ssh 目录(和父目录)和文件有正确的保护吗?例如,请参阅stackoverflow.com/questions/13425811/git-ssh-authentication/…
  • @BishopZ:你能发布git push -v heroku master的输出吗? git config -l?

标签: git heroku


【解决方案1】:

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

首先,基于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/*

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

--更新--

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

【讨论】:

    【解决方案2】:

    这个问题不是关于 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 应该能够毫无问题地连接。 :)

    【讨论】:

    • ssh-add ~/.ssh/id_[rd]sa 是为我做了什么
    【解决方案3】:

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

    示例(~/.ssh/config):

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

    所以如果是这样的话,那就更改 ~/.ssh/config 文件中的设置

    干杯

    【讨论】:

    • 我在 ~/.ssh 目录中添加了配置文件。找到IP地址,key应该是id_rsa还是id_rsa.pub?我都试过了,似乎都没有用。
    【解决方案4】:

    .ssh目录和repository目录的权限都是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”,表示组或其他的可写目录)。

    【讨论】:

    • 感谢您的评论。就我而言,所有权限都设置正确。
    猜你喜欢
    • 1970-01-01
    • 2013-10-12
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2012-02-05
    • 1970-01-01
    • 2014-07-08
    • 1970-01-01
    相关资源
    最近更新 更多