Git致命错误:远程终端挂起

28

我原以为在Windows上已经把所有东西都设置好了......然后遇到了这个问题。

当前设置

URL: ssh://user@host:port/myapp.git

已运行Putty,并且可以使用有效的.ppk密钥通过~/.ssh/authorized_keys直接连接。在Git和TortoiseGIT中,我都将它们设置为使用"plink.exe"。

Putty正常工作,没有任何问题,但是当我在bash中运行该URL进行git克隆(url)时,会出现以下错误:

fatal: the remote end hung up expectedly

在cygwin bash终端中运行"ssh user@host" - 没有任何问题。

有人有什么建议吗?


2
在你的 git clone 命令中加入 -v 以获取更多信息——里面可能有一些有用的小贴士。 - Daniel Yankowsky
2
使用Pageant预加载您的私钥,以便Git在尝试连接时可以使用它。 - innaM
2
这实际上不是一个编程问题。 - David Thornley
哎呀,我本来想关闭另一个问题的。我不能撤销关闭请求,对吧? - ripper234
显示剩余6条评论
11个回答

16

我发现使用Git包中的ssh.exe每次都有效,而不是使用Cygwin自带的ssh(默认情况下)。 使用这个导出的变量似乎有帮助;它会慢一些(2倍或更多),但更加稳定。把它当作另一种解决方法。

$ export GIT_SSH=/cygdrive/c/Program\ Files/Git/bin/ssh.exe

FYI: 这个Msysgit版本附带了OpenSSH 4.6p1和OpenSSL 0.9.8e [可用]。 Cygwin的SSH是OpenSSH 5.5p1和OpenSSL 0.9.8n [不可用]。


它更加稳定,但我失去了ssh-add集成。我该如何指向Git的ssh.exe并且每个会话只需输入一次密码? - Jenny Donnelly
尝试将ssh*.exe文件从msysgit复制到您的cygwin bin目录中。 - Edward Anderson

6

我在Windows下使用git的plink时也遇到了同样的问题。

当运行 plink.exe -v xxx@host.com 时,它开始显示: Pageant is running. Requesting keys. Pageant has 1 SSH-2 keys login as: <<< 出现问题

而不是 Pageant is running. Requesting keys. Pageant has 1 SSH-2 keys Using user "xxx"

为了解决这个问题,我通过执行 putty.exe -cleanup 清除了putty注册表记录和会话。

然后,plink重新启动并要求信任和再次存储主机,连接没有问题!


2
putty -cleanup 修复了我遇到的问题(特别是在让 TortoiseGit 与 GitHub 通信方面)。不幸的是,它会清除所有 putty 配置,因此请谨慎使用! - Eric Caron

2
尝试以下步骤,也许会给你一些解决问题的提示:
1. 运行putty并设置服务器名称/用户名/密钥等,保存这些设置。
2. 运行plink.exe或plinkw.exe,如plink.exe user_name@server,(它会向您显示一些信息)只是为了查看plink是否能连接到服务器。
3. 再次检查git是否知道它应该使用plink,我想对于所有版本控制系统来说,这是人们最常遇到的问题之一,除非他们的密钥没有正确设置。
通常现在大多数ssh问题都会被揭示出来。现在只需修复它们即可。 :)
更新:
我认为你遇到的问题是由于安装了几个 git。对于msysgit和cygwin git,您需要设置GIT_SSH变量。可以通过'set GIT_SSH=c:\path\putty\plink.exe'或'export GIT_SSH=/your/path/putty/putty.exe'来完成。如果您还使用tortoise git,则需要在其菜单中找到“属性”(或是“设置”?),并在其中设置ssh客户端。
除此之外,在指定git clone URL时,请在其中使用您的登录名和服务器名称,例如“git clone ssh://user@server/your/path/repo.git”。用户和服务器名称应由plink使用,当所有这些要求都满足时,plink应该能够连接到服务器,这样就可以完成设置了。
祝你好运。

嗨 - 感谢回复。如何检查Git是否知道应该使用plink? - Bill
顺便说一句 - 好的,我执行了echo $SSH_GIT并得到了相关的正确路径。我还尝试了plink -P端口号user@host -i /path/to/key/,这个连接成功了 - 只是git不起作用。 - Bill
你可以尝试设置GIT_SSH而不是SSH_GIT,看看效果如何。 - Dmitry
嗨,抱歉,是的,它被设置为这个。我只是想不出来 - 我可以通过Putty和Plink(命令行)连接,但无法使用GIT。每次我尝试克隆存储库时,都会出现“失败,意外挂断”的错误。 - Bill
有没有办法记录我尝试通过GIT克隆时正在发生的事情?例如,有没有办法查看plink.exe正在做什么或其他方式? - Bill
请检查答案中的更新,它未能适应评论栏。 - Dmitry

1
我们遇到了同样的问题,以下是解决问题的方案:
首先,我们得到了以下信息:
zajdan@cyberFuture:~$ git clone ssh://nette@19X.16X.14X.7X/~repos/erotika.git/ erotika
Initialized empty Git repository in /home/zajdan/erotika/.git/
Password: 
fatal: '/repos/erotika.git': unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly
zajdan@cyberFuture:~$ 

解决方案:

zajdan@cyberFuture:~$ git clone ssh://nette@19X.16X.14X.7X/~/repos/erotika.git/ erotika

波浪线后必须是斜杠


1
如果您想尝试使用cygwin openssh 5.4p1-1,这似乎可以解决问题,而5.5或5.6则不行,您可以使用cygwin time machine镜像。使用-X启动setup.exe并添加一个镜像URL,例如:
ftp://www.fruitbat.org/pub/cygwin/circa/2010/05/20/230133

请注意不要从比您的系统其余部分更旧的镜像安装过多的基本包。


0

我有完全相同的问题。

我不使用Putty(只用Cygwin)。 我使用Windows 7 Ultimate(截至目前为止已完全打补丁)。 我昨天刚安装了Cygwin。

我确保正在使用二进制挂载。

如果我通过Samba挂载将git repo复制到机器上,我可以克隆它,但在克隆后执行“git diff”时,会出现许多没有差异的“不同”文件。在“git status”之后,没有来自“git diff”的输出。这似乎是一个换行符的问题,但我无法弄清楚它是如何发生的。(我在SHELLOPTS中有igncr,但删除它并不能解决问题。)

我完全被卡住了。


顺便说一下,ssh到git主机不会产生任何多余的输出。 - e40
我认为这是Cygwin 1.7.1的问题。我刚刚将运行Cygwin 1.5的机器升级到1.7.1,现在同样工作正常的git失败了。我已经在cygwin@cygwin.com上发布了一些内容,并且如果有解决方案,我会在这里报告。 - e40
2
这是Cygwin openssh的问题。如果使用Putty的plink.exe,则可以解决此问题:http://www.cygwin.com/ml/cygwin/2009-12/msg01147.html - e40

0

检查你在CygWin里使用的openssh版本。目前最新的版本5.5p1-1也会出现相同的错误。将版本降级到5.4p1-1可解决这个问题。

另一个解决方案是使用putty/plink代替openssh。

更多详情请查看此帖子:http://www.mail-archive.com/cygwin@cygwin.com/msg103752.html


0

在克隆git存储库时,我收到了消息:“远程端口关闭,意外的EOFs,索引包失败”,但是通过copssh http://sourceforge.net/projects/sereds/files/Copssh,我能够解决这个问题。

根本原因是Cygwin openssh软件包。

我从Cygwin中删除了原始openssh,安装了copssh,并将GIT_SSH变量设置为指向copssh二进制文件。之后,我只需将copssh二进制文件添加到PATH中,现在我正在使用copssh而不是openssh-没有任何区别。

一切正常,问题不再出现。

另一个解决方案是使用mSysGit软件包。


0

0

尝试在URL中使用仓库的绝对路径,这对我有用。

而不是:

git ssh://user@host:port/myapp.git

编写:

git ssh://user@host:port//home/user/repo/myapp.git

注意双斜杠!


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