【问题标题】:Cannot push to Heroku because key fingerprint无法推送到 Heroku,因为密钥指纹
【发布时间】:2012-02-05 21:04:44
【问题描述】:

我是 Rails 新手,我正在尝试将一个非常简单的应用程序部署到 Heroku。这是我部署的第二个应用程序,也是我能够做到的第一个应用程序。但是,我对此有一些问题。每当我“git push heroku master”时,我都会收到此错误:

!您的带有指纹 xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx 的密钥无权>访问 my_heroku_app。

致命:远端意外挂断

我在登录 heroku 后尝试管理我的密钥。如果我在控制台中输入“heroku keys”,我会得到:

我的电子邮件地址没有密钥。

但是,如果我运行命令“heroku keys:add”,我会得到

找到现有的公钥:/Users/michele/.ssh/id_rsa.pub 上传 ssh 公钥 /Users/michele/.ssh/id_rsa.pub !指纹已经存在。请为每个 Heroku 帐户使用一个 ssh 密钥

请帮帮我!这太令人沮丧了,我不知道怎么了! 谢谢

【问题讨论】:

    标签: git heroku ssh git-push


    【解决方案1】:

    我遇到了同样的问题,我关注了这篇文章和其他同类但没有成功:-((

    最后,我找到了解决方案: 我必须在我的机器中添加我的新 rsa 身份!

    所以,首先我创建了一个新的 rsa 密钥:

    ssh-keygen -t rsa -C "giordano.scalzo[at]gmail.com" -f  ~/.ssh/id_rsa_heroku
    

    然后将其添加到我的机器中

    ssh-add ~/.ssh/id_rsa_heroku
    

    最后是 Heroku

    heroku keys:add ~/.ssh/id_rsa_heroku.pub
    

    之后,

    git push heroku master
    

    工作就像一个魅力!

    希望这会有所帮助。

    【讨论】:

    • 这对我来说真的很接近。但还有一件事。我有两个heroku帐户。第一个为我的机器添加了我的默认 SSH 密钥。无论我做了什么尝试修复我的第二个帐户,直到我从第一个帐户中删除了我的默认密钥。 SSH-AGENT 默认会发送第一个密钥,导致这个问题。解决方法是为每个帐户的 heroku(不是默认)创建特定的密钥
    • 我遇到了和@TomCarchrae 一样的问题。我退出了似乎被heroku logout 永久破坏的帐户,登录到另一个帐户,并从该帐户中删除了默认的 RSA 密钥。之后,我就可以使用这个新生成的密钥进行推送了。
    • 就我个人而言,虽然我是ssh-add ~/.ssh/identity.heroku.foo,但我使用了ssh-add ~/.ssh/id_rsa_heroku,因为我也在使用https://github.com/ddollar/heroku-accounts(Heroku 的多客户经理)。
    • 要记住的另一件事 - 如果您有太多 SSH 密钥,它将无法登录,因为它会按顺序尝试密钥(然后您会被踢出登录失败太多)。这似乎是 ssh-agent 的一个缺陷(无论如何在 ubuntu 中,但我认为其他实现也是如此)。所以,如果你要拔掉头发,试着移动你的 ~/.ssh 目录并开始一个新目录(然后你可以一个一个地拉入键)。
    • 您可以通过在 ~/.ssh/config 中为 heroku.com 添加一个指向您想要的密钥的主机条目来影响发送哪个密钥。这对我来说是一个快速修复,因为它一直尝试使用我的默认密钥并失败。不过,这在多个帐户的情况下可能无济于事。
    【解决方案2】:

    就我而言,问题在于我使用的 ssh 版本。 我只是将 GIT_SSH 环境变量设置为另一个(“GIT_SSH=/usr/bin/ssh”),一切正常。

    【讨论】:

      【解决方案3】:

      我还有两个 Heorku 帐户,作为一种变通方法,我“邀请”了我的主帐户(其密钥由 Heroku 自动使用的那个)作为我的项目的合作者。

      【讨论】:

        【解决方案4】:

        只是不想为 Windows 用户添加解决方案。

        1. 首次下载"Putty Key generator"

        2. 用它创建一个密钥 OBS 您需要将鼠标移到空白区域上方以产生随机性。

        3. 保存您的密钥,只需记住将您的密钥重命名为 [name].pub

        4. 在终端运行heroku keys:add

        【讨论】:

          【解决方案5】:

          这是 Heroku 文档或该问题的其他答案中缺少的非常清楚的解释。至少所有信息似乎都没有出现在任何一个地方。它还可以让您以帐户工具无法做到的方式理解问题。

          Heroku 通过 2 种方式识别您:

          第一个在.git/config中

          [heroku]
              account = acccount_name
          

          这似乎让您可以使用heroku 执行基本操作

          heroku 识别您的第二种方式是通过任何使用 ssh (git push) 的操作。 Heroku 将通过您的 ssh 密钥识别您,如下所述: https://devcenter.heroku.com/articles/keys

          此密钥对用于强加密,并且唯一 在推送代码更改时将您标识为开发人员。

          因此,您使用的每个 heroku 帐户在使用 ssh 时都必须向 heroku 发送不同的密钥。按照任何教程创建您的 ssh 密钥。

          关键是让 SSH 为每个 Heroku 帐户使用不同的密钥。你如何配置这个?你需要做两件事:

          1) 您需要创建一个 .ssh/config 将拦截和重新配置的“虚拟”域。这将告诉 ssh 您想要的“实际”域,以及要使用的特殊 ssh 密钥。

          Host heroku.my_unique_key
            HostName heroku.com
            IdentityFile ~/.ssh/identity.heroku.my_unique_key
            IdentitiesOnly yes
          

          2) 更改您的 .git/config 以在使用 git push 时使用它。使用您在 .ssh/config 中设置的虚拟域,而不是 heroku.com

          [remote "heroku"]
              url = git@heroku.com.git
          
          
          [remote "heroku"]
              url = git@heroku.my_unique_key:myapp.git
          

          就是这样 :) 有点复杂又有点简单。我花了 3 年的时间把头撞在墙上,反复试验才发现这个信息。它应该清楚地记录在某处,但至少这是一个开始。

          【讨论】:

          • 唯一的主机名是我的问题。非常感谢 pixelearth。
          【解决方案6】:

          您的计算机有一个 SSH 密钥,但该 SSH 密钥与另一个 Heroku 帐户相关联。

          如果您需要在同一台计算机上为不同的应用程序使用两个帐户,您应该在您的计算机上创建一个新的 SSH 密钥并将其上传到 Heroku:

          $ ssh-keygen
          

          当提示询问您时,请确保将其保存为“/Users/User/.ssh/new_id_rsa.pub”。

          $ heroku keys:add /Users/User/.ssh/new_id_rsa.pub 
          

          然后您需要将heroku.com 的备用主机添加到您的~/.ssh/config

          Host heroku-alt
          HostName heroku.com
          IdentityFile ~/.ssh/new_id_rsa
          

          然后更新项目中的.git/config 以使用主机别名:

          [remote "heroku"]
            url = git@heroku-alt:myapp.git
            fetch = +refs/heads/*:refs/remotes/heroku/*
          

          通过在特定项目的.git/config 文件的远程herokuheroku-alt 之间进行选择,您可以管理哪些项目使用哪些凭据。

          【讨论】:

          • 是的,这也是我的问题。从同一个客户端访问两个 Heroku 帐户。谢谢。
          • 我正在尝试使用这种方法,但是“Host heroku-alt”给了我错误:Host heroku-alt not found: 3(NXDOMAIN)。我把它放在山狮的终端上。 ~/.ssh/config 也不存在,只有一堆 .pub 文件和一个名为 known_hosts 的文件。和想法?
          • @Jascination 您需要创建 ~/.ssh/config 并放入答案中列出的内容。完成后保存文件,它将包含HostHostNameIdentityFile 行。然后它应该可以正常工作了。
          • 太棒了!这种技术太优雅了!
          • 男人!你真棒。一步一步地执行终于让我松了一口气。谢谢!!
          【解决方案7】:

          就我而言,heroku keys 已经列出了正确的密钥。所以,我所要做的就是运行ssh-add /path/to/that/key,然后一切都开始正常了。

          【讨论】:

            【解决方案8】:

            我也有多个密钥和多个 Heroku 帐户,所以我每隔几个月就会遇到这个问题。正如 Giordano Scalzo、Tom Carchrae 和 user664833 所提到的,主要问题是 ssh-agent,您可以使用 ssh-add 命令控制它。手册页 (man ssh-add) 实际上非常简洁明了,请查看。

            您可以列出 ssh-agent 知道的所有密钥:

            ssh-add -l
            

            您可以删除 ssh-agent 知道的所有密钥:

            ssh-add -D
            

            或者删除一个特定的键

            ssh-add -d ~/.ssh/id_rsa_example_key_file_use_your_own
            

            别担心!您实际上并没有删除密钥,只是更改 ssh-agent 自动尝试使用的密钥,例如,当您尝试推送到 heroku 时。根据需要添加和删除键很容易,所以对我来说,当我对这个问题感到沮丧时,解决它的最简单方法是删除所有键并只添加我目前想要使用的键。

            ssh-add -D
            ssh-add ~/.ssh/id_rsa_example_use_this_one_i_mean_it
            

            【讨论】:

            • 这对我来说效果很好,但是尝试添加我的默认 ssh 密钥一直提示输入密码(在 Mtn Lion 上),不认为我有吗?重新启动并恢复到我的默认 ssh 一切正常 - 还发现这个 stackoverflow.com/questions/7927750/… 效果很好
            • 在这个问题上把我的头靠在墙上好一会儿,这是最后一步 - 谢谢!
            • 如果您尝试了第一种方法,那么这个方法,(当您尝试推送到 Heroku 远程时出现 Permission Denied(publickey) 错误)您可能忘记重新运行 heroku键:添加命令。无论如何,非常感谢你!这是为我做的。
            【解决方案9】:

            你需要创建新的密钥并添加它们

            运行后指定一个新的文件名

            ssh-keygen
            

            那么(就我而言)

            heroku keys:add /home/alex/.ssh/alex_heroku_rsa.pub
            

            【讨论】:

              【解决方案10】:

              上周我也遇到了同样的问题。这个链接帮助了我。我希望它对你有所帮助。 http://devcenter.heroku.com/articles/keys

              【讨论】:

              • 我看到了那个链接,试图删除并再次添加我的密钥,但我仍然无法让它工作。
              • 这个问题你解决了吗?
              • 你能总结一下这个链接的说明吗?我们尽量避免在这里仅提供链接答案。
              • 这里只解释如何生成密钥,而不是如何管理多个密钥。
              猜你喜欢
              • 2012-08-02
              • 2012-06-01
              • 2020-08-30
              • 1970-01-01
              • 2014-07-08
              • 2012-11-11
              • 2016-12-14
              相关资源
              最近更新 更多