无法将git仓库推送到Heroku,尽管SSH密钥有效

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 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 命令。 - arbales
1
你的ssh目录(以及父目录)和文件是否有正确的保护?例如,请参见https://dev59.com/1mrXa4cB1Zd3GeqPEfas#13428529。 - VonC
@BishopZ:你能发布一下 git push -v heroku master 的输出吗?还有 git config -l 的输出? - mgarciaisaia
4个回答

7
这个问题与git无关,而是与ssh有关。Heroku使用git,它使用ssh,只允许公钥认证。(但我认为这已经很清楚了。) heroku keys:add会将公钥发送到Heroku。除非您指定显式密钥,否则它将使用~/.ssh/id_[rd]sa.pub
要成功进行身份验证,您需要提供匹配的私钥。除非另有说明,否则ssh将使用~/.ssh/id_[rd]sa,但如果权限太宽松,它将拒绝读取它。(详见man ssh 文件中的FILES部分。)
检查权限是否正确的一种简单方法是将密钥添加到代理程序: ssh-add ~/.ssh/id_[rd]sa 这应该会将密钥添加到代理程序(用ssh-add -L验证),或者抱怨权限不正确。(如果首先没有运行任何代理程序,则可以使用“ssh-agent bash”启动一个。)
在将密钥添加到代理程序之后,代理程序将负责身份验证,并且您的git也应该能够无问题地连接上去。 :)

ssh-add ~/.ssh/id_[rd]sa 对我很有用。 - Tyrel Richey

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网站并更新了配置文件:
它包含以下内容:
[remote "heroku"]
    url = git@heroku.com:my_new_app_name.git
    fetch = +refs/heads/*:refs/remotes/heroku/*

感谢所有提供建议的人!我很高兴终于要开始开发新应用了!

--更新--

每次重启电脑后,我都需要重新运行这个命令。我可以将其添加到我的.profile或其他地方,但觉得有必要说明一下。


2
根据您的设置,您可能有一个配置文件在您的 ~/.ssh/ 目录中,该文件设置了在推送到heruko时要使用哪个公钥文件。例如(~/.ssh/config):
Host 127.0.0.1 #Use Heroku's IP
IdentityFile ~/.ssh/use_this_key

如果是这种情况,那么在~/.ssh/config文件中更改设置即可。
祝好。

我在我的~/.ssh目录下添加了配置文件。找到了IP地址,密钥应该是id_rsa还是id_rsa.pub?我尝试了两者,但似乎都不起作用。 - BishopZ

0

.ssh 目录和仓库目录的权限均为 555。

对于 ssh 连接而言,组和其他权限 都是计算在内的:

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

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

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

555对于.ssh来说是可以的,尽管建议使用700
检查其父目录:755或555一直到/(没有“2”、“3”或“6”,表示组或其他可写目录)。


感谢您的评论。在我的情况下,所有权限都已正确设置。 - BishopZ

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