无法将git推送到远程仓库:(SSH错误)

10

当我尝试将代码推送到我的heroku.com远程git仓库时,出现以下信息:

ssh: connect to host heroku.com port 22: Connection refused

我可以很容易地使用与github上相同的SSH密钥来操作我的存储库。

输入:

$ssh git@github.com    #outputs: success message
$ssh git@heroku.com    #outputs: ssh: connect to host heroku.com port 22: Connection refused

我使用的是Mac OS 10.6操作系统,而且我正在(慢慢地)学习中!

更新:

$telnet heroku.com 22

得到的输出为:

Trying 75.101.145.87...
telnet: connect to address 75.101.145.87: Connection refused
Trying 75.101.163.44...
telnet: connect to address 75.101.163.44: Connection refused
Trying 174.129.212.2...
telnet: connect to address 174.129.212.2: Connection refused
telnet: Unable to connect to remote host

1
我添加了ssh标签,因为它与问题相关,并删除了ruby-on-rails标签,因为它不相关。 - Frank Shearar
4个回答

5

连接被拒绝是一个TCP错误消息,表示该服务器在该端口上没有运行服务。在这种情况下,可能是heroku.com的SSH服务器没有运行。

如果您没有向他们提供您的密钥,或者使用了错误的私钥,ssh会显示类似于以下内容:

frank@roke$ ssh git@heroku.com
Permission denied (publickey).

frank@roke$ ssh -i ~/.ssh/roke-frank.priv git@heroku.com
Permission denied (publickey).

(上述消息表明,目前Heroku的SSH服务器确实正在运行。)

由于您无法连接到我可以连接的同一台服务器,可能存在防火墙问题。您是否在NAT后面?您的网关是否允许连接到远程机器的22端口?

该机器也运行着Web服务器,因此请尝试使用telnet heroku.com 80查看是否能够连接到该机器。


telnet heroku.com 80 成功... $ telnet heroku.com 80 尝试连接 75.101.163.44... 已成功连接到 heroku.com。 ---- 我没有遇到防火墙问题,真的很奇怪的是 $ssh git@github.com 没有出现任何问题...(如果我运行 ssh -v git@github.com,我可以看到它正在端口 22 连接) - Matt H.
1
是时候使用tcpdump了。尝试类似于 tcpdump -i <你的接口> -vX -s1024 host heroku.com and port 22 的命令,让我们看看输出结果。 - Frank Shearar
1
@Frank,好的,最后一件事!Heroku技术支持人员回复我说,我可能安装了Peerguardian或类似的软件导致出现问题。(我确实安装了Peerguardian,但目前没有运行)。引用他们的话,“大多数情况下,我们发现用户使用了阻止EC2/Amazon的软件。”也许这有所帮助? - Matt H.
1
我进行了一些调查,发现PeerGuardian在系统配置中有两个进程正在运行,即使该应用程序没有运行。我完全卸载了PeerGuardian并重新运行telnet heroku.com 22。成功! - Matt H.
这也发生在我身上。我在公司防火墙后面,试图推送到Heroku。虽然我使用了匿名代理(tor),但由于ssh未使用代理来隧道流量,因此仍然会出现这种情况。然后我使用corkscrew通过代理隧道ssh流量,这样就可以正常工作了。 - binW
显示剩余3条评论

2

看起来ssh服务器没有工作或主机离线了。我认为这只是暂时的问题。

我现在正在尝试:

telnet heroku.com 22
Trying 174.129.212.2...
Connected to heroku.com (174.129.212.2).
Escape character is '^]'.
SSH-2.0-OpenSSH_5.1p1 Debian-5pgsql1

无论如何,您可以通过执行 ssh -v git@heroku.com (或 -vv) 进行诊断。

OpenSSH_5.2p1,OpenSSL 0.9.8l 5 Nov 2009 \ debug1:正在读取/etc/ssh_config配置数据\ debug2:ssh_connect:needpriv 0\ debug1:连接到heroku.com [75.101.163.44]的22端口。\ debug1:连接到地址75.101.163.44的22端口:连接被拒绝\ debug1:连接到heroku.com [174.129.212.2]的22端口。\ debug1:连接到地址174.129.212.2的22端口:连接被拒绝\ debug1:连接到heroku.com [75.101.145.87]的22端口。\ debug1:连接到地址75.101.145.87的22端口:连接被拒绝\ ssh:无法连接到主机heroku.com的22端口:连接被拒绝 - Matt H.
2
“ssh -v” 在这种情况下没有帮助:正如您所看到的,这是一个 TCP 问题。连接被拒绝意味着 SSH 会话的协商甚至还没有开始。 - Frank Shearar
我有同样的问题... 我无法为我的任何应用程序推送代码。我无法通过SSH(端口22)连接到heroku.com使用git:https://gist.github.com/littlepea/5538265 - littlepea

0

我刚刚在一些长期运行良好的东西上遇到了这个问题,突然在我所有的电脑和与我合作的人身上都出现了故障,如果有帮助的话。我们的问题是我们的.git/config使用@ github网址。

例如:不是这样

[remote "heroku-some-site"]
  url = git@heroku.com:some-site.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

做这个

[remote "heroku-some-site"]
  url = https://git.heroku.com/some-site.git
  fetch = +refs/heads/*:refs/remotes/heroku/*

0

你需要将你的密钥推送到Heroku。

因为Heroku和Github是两个不同的服务。它们不共享你的密钥。


抱歉,看到更新的帖子了。我对SSH不太熟悉。我的意思是我刚刚第一次配置了一个SSH密钥。 - Matt H.
我成功地运行了命令 $heroku keys:add /Users/<username>/.ssh/id_rsa.pub,但是当我尝试 $ssh git@heroku.com 时仍然遇到连接错误。 - Matt H.
1
Matt,请尝试使用“telnet heroku.com 22”来检查服务是否正在运行。您应该会看到类似于“SSH-2.0-OpenSSH_5.1p1 Debian-5pgsql1”的内容。 - Frank Shearar
运行“telnet heroku.com 22”时出现错误(请参见更新的帖子),与运行“telnet github.com 22”并得到您预测的结果(SSH-2.0-....等)形成对比。这是否意味着heroku.com端出现了问题? - Matt H.
或者中间的某个东西。请查看我的编辑答案,获取另一个调试提示。 - Frank Shearar

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