git push heroku master 权限被拒绝

54

我正在跟随Ruby on Rails教程,运行命令"git push heroku master"时出现了以下错误。

Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

我在我的 Rails 应用程序 "/Users/lexi87/rails_projects/first_app" 中。有什么解决方法吗?


6
你可以参考Heroku的SSH密钥管理指南:https://devcenter.heroku.com/articles/keys。 - derekerdmann
7个回答

71
避免这样的错误的最佳方法是使用一个公钥/私钥对,而不是额外的heroku密钥。这样您(或您的系统)就不能选择错误的密钥登录heroku。
如果您遇到此错误,则可能已经做错了什么。请检查此网站:https://devcenter.heroku.com/articles/keys 如果您遇到此错误,最好的方法是删除不必要的密钥并仅使用一个密钥。
如果您需要在系统上使用多个密钥对,则可以为heroku设置一个密钥。可以通过以下命令完成:
heroku keys:add

21
谢谢。我需要运行命令"heroku keys:add",然后选择"id_rsa"选项。 - Cornelius Wilson

13

以下是针对安装了Github Windows客户端的Windows 7用户的帮助:

虽然heroku toolbelt报告它找到了我的git_hub公钥并上传了它,但'git push heroku master'失败了。按照以下步骤操作后,它可以正常工作。

  1. 如果您的用户文件夹下没有.ssh文件夹,请创建一个。如果有,请删除其中所有文件(这意味着您可以从ssh密钥重新开始)。

  2. 在Windows资源管理器中,右键单击.ssh文件夹,并从上下文菜单中选择Git bash。这是与Github Windows客户端软件一起安装的。

  3. 在bash窗口中输入ssh-keygen -t rsa -C "yourname@email.com",当提示时输入密码(不要丢失此密码)。

  4. 关闭bash shell窗口。

  5. 在项目根目录中的cmd提示符中,输入heroku keys:add。这将在/.ssh文件中找到并上传您刚刚创建的密钥到Heroku。

现在,您可以输入git push heroku master将应用程序推送到Heroku。注意:完成后,您需要将新生成的ssh公钥添加到您的Github帐户中。


太好了,@mjulmer。尝试了很多选项,但最终你的解决方案对我管用。非常感谢你。当然,这适用于Windows 7用户 :) - Anmol Saraf
我认为你的方法和我尝试的方法的主要区别在于“-C emailaddress”属性。在我的情况下,它将Windows用户名作为windows@windows-PC而不是我在Heroku注册的电子邮件地址。再次不确定这是否真的是原因 :) - Anmol Saraf
谢谢!我在非Windows环境下的其他答案中一直徘徊。 - bcm
太好了!它说我需要再写6个字符! - Utsav T
@mjulmer 在Windows 10上的Windows Explorer不允许创建“.ssh”文件夹。但是你可以在命令提示符窗口(控制台)中使用“mkdir .ssh”命令来创建该文件夹。 - CodeToLife

8

我曾经遇到同样的问题。在我的.ssh文件夹中,有一个名为“已知主机”的文件。我一直试图删除和创建新的ssh密钥,但都没有成功。最后,我只是删除了.ssh文件夹中的所有内容,包括“已知主机”,然后使用以下命令创建了一个新的rsa密钥:

ssh-keygen -t rsa

然后我使用以下方法将这个新的密钥添加到Heroku:

heroku keys:add

然后创建一个新的Heroku仓库,并将我的应用程序推送到其中:
heroku create
git push heroku master

4
ssh-keygen -t rsa

上面是可选项,因为您也可以链接到现有的密钥。Heroku将在下一步提示选择密钥。
heroku keys:add

添加您新创建的密钥或现有密钥。如果您仍然遇到问题,最有可能需要执行以下操作将密钥添加到您机器的ssh密钥列表中:

ssh-add ~/.ssh/name_of_your_rsa

请确认您的ssh已经添加

ssh-add -l

这将使您可以访问推送到Heroku远程仓库的权限。

2
在OSX上,我遇到了相同的问题,我得到了
no such identity: /Users/me/.ssh/yourPrivateKey: No such file or directory
Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

我尝试使用ssh-keygen -t rsa创建一个新的密钥,然后使用heroku keys:add添加它,但这并没有帮助解决问题。
然后我在~/.ssh/目录下找到了一个名为config的文件,打开后发现里面有以下内容:
ServerAliveInterval 300
ServerAliveCountMax 3

host heroku.com
    user git
    hostname heroku.com
    identityfile ~/.ssh/yourPrivateKey

于是我将 yourPrivateKey 改为了我的私钥文件名(默认为 id_rsa),然后就好用了 :)


0

我创建了一个密钥

ssh-keygen -t rsa

并使用了与id_rsa不同的文件名(在我的情况下是heroku)。我将该密钥添加到了heroku中。

heroku keys:add

尝试将主分支推送到Heroku时,我总是收到以下错误:   “$ git push heroku master” “无法确定主机'heroku.com(50.19.85.132)'的真实性。 RSA密钥指纹为8b:48:5e:67:0e:c9:16:47:32:99:87:0c:1f:c8:60:bb。您确定要继续连接吗(是/否)? 是警告:永久添加了'heroku.com,50.19.85.132'(RSA)到已知主机列表中。 权限被拒绝(publickey)。 致命错误:无法从远程存储库读取。” 请确保您具有正确的访问权限并且存储库存在。   正如我注意到的那样,Git只使用了我的id_rsa密钥来自另一个ssh访问(您可以通过git gui检查它:Help-> SSH keys)。

我将我的 .ssh 目录 C:\Users\%username%.ssh 重命名为 .ssh.bak,并将我的 heroku 私钥和公钥(从 .ssh.bak 目录中)复制到一个新创建的 .ssh 目录,并将其命名为 id_rsa(和 id_rsa.pub)。

现在推送按预期工作:

git push heroku master

0
如果您正在使用Windows操作系统,请确保使用git-bash而不是Powershell/命令提示符。
如果您只想重置您的ssh密钥:
  1. 删除用户的.ssh目录
  2. 打开git-bash
  3. ssh-keygen -t rsa
  4. heroku keys:add
然后,您就可以进行git push了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接