Git远程:错误:致命的:协议错误:坏行长度字符:Unab

我build立了一个git服务器,现在想从客户端开始我的回购。 我用git push origin master并得到这个错误信息:

 fatal: protocol error: bad line length character: Unab 

我不知道什么是错的。 我不知道“Unab”是什么。 我试图调整shell,但它仍然是“Unab”。 我无法find此错误消息的解决scheme。

我用“authorized_keys”和SSH设置服务器。 (我可以连接到它,使用SSH。)

这似乎是一个混帐问题?

BTW:服务器设置在Windows 7虚拟机中

这个错误信息有一点困难,但实际上,它告诉你的是,远程服务器没有回应正确的git响应。 最终,运行git-receive-pack进程的服务器出现问题。

在Git协议中,前四个字节应该是行的长度。 相反,他们是Unab的字符……这可能是某种错误信息的开始。 (即可能“ Unable to... ”做些什么)。

当你运行ssh <host> git-receive-pack <path-to-git-repository>什么? 你应该看到你的git客户端正在攻击的错误消息,你也许可以纠正它。

我有类似的问题,但确切的错误信息是:

致命的:协议错误:坏行长度字符:Usin

这是在Windows中, GIT_SSH设置为PuTTY的plink.exe的path。

可能的问题和解决scheme

  • 确保plink.exe的path正确。 Unix样式path也可以正常工作,例如/c/work/tools/PuTTY/plink.exe
  • 确保PuTTY( pageant.exe )的密钥代理正在运行
  • 确保密钥代理包含访问服务器的有效密钥

也许你在服务器的.bashrc中有一个产生输出的语句。 我例如有这样的:

 [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" rvm use ruby-1.9.3-p194@rails32 

在这种情况下,rvm使用的输出将被(错误地)解释为来自git。 所以把它换成:

 rvm use ruby-1.9.3-p194@rails32 > /dev/null 

在Git扩展中加载SSH私钥之后,这个问题就解决了。

我在使用Git Bash的Windows上遇到类似的问题。 试图做一个git克隆时,我不断得到这个错误。 该存储库位于安装了GitLab的Linux机器上。

 git clone git@servername:path/to/repo fatal: protocol error: bad line length character: git@ 

我确定ssh密钥已经生成。 公钥已添加到GitLab上。 ssh-agent正在运行,并添加了生成的密钥( github链接 )。

我用尽了选项,然后最后尝试closuresGit Bash并通过右键单击“以pipe理员身份运行”再次打开它。 之后工作。

检查用于连接到远程计算机的帐户的“回显”语句的启动文件。 对于Bash shell,这些将是你的.bashrc和.bash_profile等。Edward Thomson在他的回答中是正确的,但是我遇到的一个具体问题是当通过sshlogin到服务器时出现一些锅炉板打印输出。 Git将得到该锅炉板的前四个字节,并提出这个错误。 现在在这个特定情况下,我会猜测“Unab”实际上是“Unable …”这个工作,这可能表明Git主机上还有其他错误。

对我来说,这是因为我最近补充说

 RequestTTY force 

到.ssh / config

评论这个允许它工作

这可能有助于某人。 当我试图克隆一个EC2实例的项目时,我得到了下面的错误:

 Cloning into 'repo1'... fatal: protocol error: bad line length character: logi 

我的决议包括以下步骤:

  1. 确保在EC2实例中添加/更新SSH密钥(公共)。
  2. 确保身份validation代理(在我的情况下它的Pageant = Putty身份validation代理)正在运行,并且加载相应的私钥。
  3. 使用EC2 SSH密钥ID作为git clone的公钥。 例:

    git clone ssh:// {SSH Key ID}@someaccount.amazonaws.com/v1/repos/repo1

在Windows上安装GIT后,我遇到了同样的问题。 起初,它的工作; 然后,一天后(PC重新启动后),它不再了,我得到这个:

 $ git pull fatal: protocol error: bad line length character: git@ 

问题是重启后,自动启动的Putty“pageant.exe”没有私钥激活了。 当你在选美中添加一个键时,默认情况下它不是一个永久性的设置。 我只是不得不再次添encryption钥,并且它工作正常。 所以,在这种情况下,有必要自动加载页面,如下所述:

https://www.digitalocean.com/community/tutorials/how-to-use-pageant-to-streamline-ssh-key-authentication-with-putty

错误转换为:致命的:协议错误:坏行长度字符:fata

在将git-upload-pack的位置添加到系统path之后。

问题似乎是在存储库名称周围添加一个撇号:使用像Process Monitor(来自sys内部)这样的工具,这是由git客户端添加的。 这似乎是一个特定于Windows的git问题。

我在服务器的提示符中尝试了相同的命令行:完整的错误是“致命的:不是给定的存储库(或任何父目录):.git”

总之,对我来说,这似乎是一个软件错误。 被告知,我不是一个混帐专家,这是我第一次使用混帐,我来自颠覆和执行。

我和Christer Fernstrom有同样的问题。 在我的情况下,这是我在.bashrc中提出的一个信息,提醒我在几天之内没有做完备份时做了备份。

以下可能会有所帮助:当尝试克隆我的AWS EC2实例上的项目时,出现以下错误:

 Cloning into 'AWSbareRepo'... fatal: protocol error: bad line length character: Plea 

这是由于尝试以root身份而不是EC2-USER而导致的。 如果你真的没有做一个git克隆ssh …你会看到在“请用ec2用户login”的东西沿线的错误信息一旦我做了一个ec2用户的git克隆,这是很好的。

我偶尔会遇到那个错误,但是当它发生时,这意味着我的分支不是最新的,所以我必须做git pull origin <current_branch>

FYI在升级CentOS6容器到CentOS7后,我得到了同样的错误信息 – 一些git操作在构build容器时开始失败,例如

 # git remote show origin fatal: protocol error: bad line length character: Inva 

运行SSH给了我一个错误,我可以search:

 # ssh git@bitbucket.org Invalid clock_id for clock_gettime: 7 

这导致我https://github.com/wolfcw/libfaketime/issues/63在那里我意识到我忘记了我父LDerfile中有一个;LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1 libfaketime.so.1。 评论说,解决了这个错误。

我们也碰到了这个。

 Counting objects: 85, done. Delta compression using up to 4 threads. Compressing objects: 100% (38/38), done. Writing objects: 100% (38/38), 3.38 KiB | 0 bytes/s, done. Total 38 (delta 33), reused 0 (delta 0) Auto packing the repository for optimum performance. fatal: protocol error: bad line length character: Remo error: error in sideband demultiplexer 

我不知道出了什么问题,但在我们的情况下触发的是服务器上的磁盘已满。

这可能是你的机器上的安全访问,你是否运行Pageant(这是一个油灰剂)?

你总是可以有http链接到你的git项目。 你可以使用,而不是SSH链接。 这只是一个选项,你有

那么,我有这个相同的问题(Windows 7)。 尝试通过密码获取回购。 我使用Git Bash + Plink(环境variablesGIT_SSH)+ Pageant。 删除GIT_SSH(临时)帮助我。 我不知道为什么我不能同时使用通过login和RSAlogin…

在我的情况下,问题是32位腻子和pageant.exe – 它不能与64位TortoisePlink.exe沟通。 用64位版本replace32位腻子解决了这个问题。

如果你没有你的私钥authentication设置 ,Git不会提示input密码,也不会提示类似的神秘消息“致命的:协议错误:坏行长度字符:用户”。

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server告诉如何在服务器上指定公钥。; 基本上把公钥添加到〜/ .ssh / authorized_keys或〜/ .ssh / authorized_keys2

我不得不在如何在Windows机器上为Git Bash提供私钥方面苦苦挣扎。 丹麦克莱恩的答案在https://serverfault.com/questions/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801描述。; 除了他的回答,在我的情况下,私人密钥文件预计将被命名为id_rsa.pub

迟到的答案在这里,但希望它会帮助某人。 如果它的协议错误,它必须做一些与你的本地git无法沟通的远程git。 如果你通过ssh克隆了repo,并且在某个时候你丢失了repo的密钥,或者你的ssh代理不能再find这些密钥,就会发生这种情况。

  1. 生成一个新的密钥,并将其添加到您的git repo或configuration您的ssh代理加载密钥,如果你还有别人的密钥;)

  2. 另一个快速的解决方法是进入你的.git目录,编辑config文件的[remote "origin"] urlgithttp这样ssh密钥就不需要push了,它会恢复到询问你的用户名和密码。

     [remote "origin"] url = git@gitlab.*****.com:****/****.git fetch = +refs/heads/*:refs/remotes/origin/* 

改成

  [remote "origin"] url = http://gitlab.*****.com/****/****.git fetch = +refs/heads/*:refs/remotes/origin/* 

对于我添加相同的主机的详细信息与私人密钥(与puttygen转换)工作。 任何后git bash命令都没有问题。

我有同样的错误“致命的:协议错误:坏行长度字符:shmi”在我的情况下shmi是用户名。 我在“Git Extensions-> Settings-> SSH”中将SSH从PuTTY切换到OpenSSH。 它帮助。

检查服务器上是否允许Shell访问。