Git错误:"fatal: The remote end hung up unexpectedly" (Git error: "致命错误:远程端意外挂断")

3
奇怪的问题出现了。我们48台服务器尝试从Git拉取时,会不断地收到“连接被远程主机关闭”的错误。当直接运行包含git pull代码的.sh文件时,就没有这个问题,除非它与其他拉取(*/5定时任务)同时运行。
下面是运行的.sh文件:
#!/bin/bash

BRANCH=master
BASE_DIR=/root/api
if [ ! -d $BASE_DIR ]; then
        mkdir -p $BASE_DIR
fi

cd $BASE_DIR

if [ ! -d .git ]; then
        git init
        git remote add origin git@bitbucket.org:deximedia/api_nodejs.git
        git pull origin $BRANCH
    forever start $BASE_DIR/call/index.js
elif [[ $(git ls-remote origin -h refs/heads/master | awk '{ print $1 }') != $(git rev-list --max-count=1 master) ]]; then
                git pull origin $BRANCH
                forever stop $BASE_DIR/call/index.js
        forever start $BASE_DIR/call/index.js
fi

以下是当所有服务器尝试运行上述 .sh 文件时我们看到的错误信息:
ssh_exchange_identification: Connection closed by remote host
fatal: The remote end hung up unexpectedly
ssh_exchange_identification: Connection closed by remote host
fatal: The remote end hung up unexpectedly

我对此没有答案,但我观察到一个Gitlab服务器的奇怪现象是,如果我通过http协议“push”包含较大(15 Mb)文件的提交,则出现未知原因的挂起。然而,使用SSH即使处理大文件也没有任何问题。例如,在同一台机器上、相同的数据和相同的Git版本下,Github通过SSH和https都可以无缝地处理同一大文件。 - user2489252
1个回答

0

当我们的CI系统尝试同时从一个简单的ssh git设置中获取多个分支时,我们遇到了相同的问题。我怀疑ssh服务器存在某些问题,会切断连接。

对我来说,在/etc/ssh/sshd_config中设置MaxStartups解决了这个问题。我们系统上的默认值是10:30:60。将其设置为100可以禁用概率方法,并允许100个并发连接启动。根据需要进行调整,基于您希望支持的并发连接设置数量,例如通过SSH同时获取git的启用构建作业数量。


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