不能'git push'到Heroku

时间:2014-08-02 16:09:14

标签: git heroku ssh

我不能以正常方式离开我家git push到Heroku。我尝试在不同的应用程序上使用两个不同的帐户(家庭和工作),使用不同的ssh密钥。这不是一个损坏的回购,因为它可以在我的工作计算机上运行。 (事实上​​,我通常会在ssh之前解决这个问题 - 从那里开始工作和部署,但是权力已经消失了,所以这周末我不能这样做!)

首先,这与其他几十个类似的问题不同,主要是因为我没有错误

错误(非)消息

$ git push heroku master
Connection closed by 50.19.85.132
fatal: Could not read from remote repository.

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

请注意,在连接关闭之前它会挂起60秒,并显示此信息。

$ git push -v heroku master
Pushing to git@heroku.com:myherokuapp.git
Connection closed by 50.19.85.154
fatal: Could not read from remote repository.

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

我尝试过什么

  • heroku keys:add - 命令成功,密钥被添加到我的帐户(在heroku.com上显示,我收到了电子邮件),但没有任何变化。

  • 完全重新生成密钥。与上述相同。

  • 使用herokugit remote命令删除并重新添加git heroku git:remote repo。 (没有变化。)

  • 使用ssh -vvv调试连接。 (见下文。)

各种调试命令的输出

$ git remote -v
heroku  git@heroku.com:myherokuapp.git (fetch)
heroku  git@heroku.com:myherokuapp.git (push)

$ heroku apps:info
=== myherokuapp
Git URL:       git@heroku.com:myherokuapp.git
Owner Email:   twobitalchemist@gmail.com
Region:        us
Stack:         cedar
Web URL:       http://myherokuapp.herokuapp.com/

$ ping -c4 50.19.85.132
PING 50.19.85.132 (50.19.85.132) 56(84) bytes of data.
64 bytes from 50.19.85.132: icmp_seq=1 ttl=37 time=48.9 ms
64 bytes from 50.19.85.132: icmp_seq=2 ttl=37 time=49.1 ms
64 bytes from 50.19.85.132: icmp_seq=3 ttl=37 time=47.9 ms
64 bytes from 50.19.85.132: icmp_seq=4 ttl=37 time=49.2 ms

--- 50.19.85.132 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 47.997/48.832/49.245/0.498 ms

$ ping -c4 50.19.85.154
PING 50.19.85.154 (50.19.85.154) 56(84) bytes of data.
64 bytes from 50.19.85.154: icmp_seq=1 ttl=41 time=47.8 ms
64 bytes from 50.19.85.154: icmp_seq=2 ttl=41 time=47.7 ms
64 bytes from 50.19.85.154: icmp_seq=3 ttl=41 time=49.7 ms
64 bytes from 50.19.85.154: icmp_seq=4 ttl=41 time=50.0 ms

--- 50.19.85.154 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 47.746/48.855/50.055/1.059 ms

$ ssh -vvv git@heroku.com
OpenSSH_6.6.1, OpenSSL 1.0.1h 5 Jun 2014
debug1: Reading configuration data /home/user/.ssh/config
debug1: Reading configuration data /etc/ssh/ssh_config
debug2: ssh_connect: needpriv 0
debug1: Connecting to heroku.com [50.19.85.132] port 22.
debug1: Connection established.
[ several lines ommitted ]
debug1: Offering ECDSA public key: /home/user/.ssh/id_ecdsa
debug3: send_pubkey_test
debug2: we sent a publickey packet, wait for reply
[ hangs here ]
Connection closed by 50.19.85.132

其他信息

我在工作中使用的同一个ISP上使用Arch Linux(虽然在工作中我们有静态IP),除了内置于我家(Netgear)路由器的内容之外我没有防火墙阻止任何事情。我不是代理人。我可以从这里部署到GitHub就好了。无论出于何种原因,我甚至无法与Heroku建立联系。我知道我的公钥没有被拒绝,并且它首先没有连接,因为日志没有显示任何内容并且没有活动:

$ heroku logs
2014-08-02T02:12:36.883623+00:00 heroku[api]: Enable Logplex by twobitalchemist@gmail.com

更新:我已就这个问题开了一张Heroku门票,正在等待他们的支持回复。如果他们能够解决问题,我会在这里回答。

3 个答案:

答案 0 :(得分:6)

看起来这可能是您的安全证书的问题。 Heroku不支持ECDSA密钥per their documentation。我将创建一个用于heroku的新RSA SSH密钥,仅用于heroku,将新公钥发送给他们,然后设置一个ssh配置文件,以便在SSH到达heroku.com时提供该密钥。

这就是我在笔记本电脑上~/.ssh/config文件中的内容:

Host heroku.com
  IdentityFile /Users/danielrice/.ssh/identity.heroku.danielricecodes
  IdentitiesOnly yes

答案 1 :(得分:0)

试试这个:

git@heroku.com/myherokuapp.git

这可能不是有效的网址:

git@heroku.com:myherokuapp.git

或者尝试使用https格式的遥控器。

https://git@heroku.com:myherokuapp.git

https://git@heroku.com/myherokuapp.git

您可能没有为git协议打开正确的端口

注意:git存储库的常见URL方案是:

ssh:// - default port 22
git:// - default port 9418
http:// - default port 80
https:// - default port 443

我已经添加了这个,因为你试图测试你的ssh连接,这可能是端口22.你可能需要检查端口9418。

另一个选择是强制git使用https://而不是git://:

git config --global url."https://".insteadOf git://

git config --global url."https://git.somehost.com".insteadOf git://git.somehost.com

答案 2 :(得分:0)

我刚刚遇到了类似的问题。在验证我拥有正确的 RSA 密钥格式并且可以通过 ssh 连接到 heroku 之后,当我尝试推送时,我仍然收到“致命:无法连接到 git.heroku.com:”错误。以下是对我有用的方法:

首先检查你是否有遥控器

git remote -v

如果有遥控器,则用 git remote rm [remote name] 删除它。例如,在我的情况下,远程名称是“heroku”

git remote rm heroku

然后使用带有 --ssh-git 标志的 heroku 命令再次添加遥控器

heroku git:remote --ssh-git

这是基于这篇 heroku 支持文章:https://devcenter.heroku.com/articles/git#ssh-git-transport