Git Remote:错误:致命:协议错误:错误的行长字符:Unab

时间:2011-11-17 16:11:53

标签: git ssh authorized-keys

我设置了一个git服务器,现在想要从客户端推送我的repo。 我使用git push origin master并收到此错误消息:

fatal: protocol error: bad line length character: Unab

我不知道出了什么问题。我不知道“Unab”是什么。我试图调整shell的大小,但它仍然是“Unab”。 我无法找到此错误消息的解决方案。

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

这似乎是一个git问题?

BTW:服务器在Windows 7 VM中设置

33 个答案:

答案 0 :(得分:99)

此错误消息有点迟钝,但它实际上试图告诉您的是远程服务器没有使用正确的git响应进行回复。最终,运行git-receive-pack进程的服务器出现问题。

在Git协议中,前四个字节应该是行长度。相反,它们是字符Unab ...这可能是某种错误信息的开始。 (也就是说,它可能是“Unable to...”做某事。

运行ssh <host> git-receive-pack <path-to-git-repository>时会发生什么?您应该看到您的git客户端正在进行操作的错误消息,您可以更正它。

答案 1 :(得分:48)

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

  

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

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

可能出现的问题和解决方案:

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

答案 2 :(得分:16)

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

self.tableView.sectionIndexBackgroundColor = .black

问题是重启后,自动启动的Putty“pageant.exe”没有私钥活动了。在pageant中添加键时,默认情况下它不是持久性设置。我只需要再次添加密钥,它工作正常。因此,对于这种情况,有必要使pagenant自动加载密钥,如下所述:

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

答案 3 :(得分:16)

也许你在服务器的.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

答案 4 :(得分:11)

  

对于GitExtension用户:

将git升级到2.19.0后我遇到了同样的问题

  

解决方案:

工具>设置> Git扩展> SSH

选择[ OpenSSH ]而不是[ PuTTY ]

enter image description here

答案 5 :(得分:11)

在Git Extensions中加载SSH私钥后,此问题得到解决。

答案 6 :(得分:9)

您可以将.bashrc的任何输出重定向到stderr

# inside .bashrc
echo 'some error/warning/remind message' 1>&2

git将忽略此符号

答案 7 :(得分:7)

我在使用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 link)。

我用完了选项,然后终于尝试关闭Git Bash并通过右键单击“以管理员身份运行”再次打开它。在那之后工作。

答案 8 :(得分:3)

在我的案例中,在获取之后写了:fatal: protocol error: bad line length character: Pass。推后我得到了:fatal: protocol error: bad line length character: git@ Done

重新启动Windows后,我不得不再次启动“PuTTY agent”(pageant.exe)并添加一个从密钥列表中消失的私钥。

答案 9 :(得分:3)

这可能对某人有所帮助。当我尝试从EC2实例克隆项目时,我收到以下错误:

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

我的决议包括以下步骤:

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

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

答案 10 :(得分:3)

对我来说,这是因为我最近添加了

var data = ["aaa", "abc", "abd"];

var svg = d3.select("body").append("svg")
  .attr("width", 200)
  .attr("height", 200);

svg.selectAll("text")
    .data(data)
    .enter()
    .append("text")
    .attr("x", function(d,i) {
        return 20 + 50 * i;
    })        
    .attr("y", 100) 
    .text(function(d) { return d; });

进入.ssh / config

评论这个允许它工作

答案 11 :(得分:3)

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

答案 12 :(得分:2)

在我的情况下,问题是32位Putty和pageant.exe - 它无法与64位TortoisePlink.exe进行通信。用64位版本替换32位Putty解决了这个问题。

答案 13 :(得分:2)

我遇到了同样的错误"fatal: protocol error: bad line length character: shmi" 在我的情况下,shmi是用户名。 我在"Git Extensions->Settings->SSH"中将SSH从PuTTY切换到OpenSSH。 它有所帮助。

答案 14 :(得分:1)

仅供参考我在将CentOS6容器升级到CentOS7后得到了同样的错误消息 - 在构建容器时,一些git操作开始失败,例如

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

运行ssh给了我一个我可以搜索的错误:

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

这导致我https://github.com/wolfcw/libfaketime/issues/63,我意识到我忘记了我在父Dockerfile中有LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1。评论说明修正了错误。

答案 15 :(得分:1)

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

答案 16 :(得分:1)

以下内容可以帮助某人: 当我尝试克隆我在AWS EC2实例上的项目时,我收到以下错误:

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

这是因为尝试以root身份而不是EC2-USER进行ssh。 如果你实际上ssh没有做一个git克隆...你会看到错误消息带来的&#34;请用ec2-user&#34; 一旦我作为ec2用户进行git克隆就很好了。

答案 17 :(得分:1)

如果使用腻子。然后确保运行Pageant,并将您的私钥加载到Pageant中(鼠标右键单击任务栏上的Pageant图标,然后在弹出的菜单上单击“查看密钥”)。

否则,当您在cmd.exe中执行操作时:

git clone ssh://name@host:/path/to/git/repo.git

您收到此消息“致命:协议错误:错误的行长字符:”

答案 18 :(得分:1)

我和Christer Fernstrom有同样的问题。在我的情况下,这是我在.bashrc中添加的一条消息,提醒我在几天内没有完成备份时做备份。

答案 19 :(得分:1)

Git没有提示输入密码,并且因类似的隐秘消息而失败&#34;致命:协议错误:线路长度错误:用户&#34; 如果您还没有设置私钥身份验证

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提供私钥方面有所作为。 Dan McClain在https://serverfault.com/questions/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801中的回答描述了这一点。他的回答是一个补充,在我的例子中,私钥文件应该被命名为id_rsa.pub

答案 20 :(得分:1)

对于我,使用私钥(使用puttygen转换)将相同的主机详细信息添加到Putty中。之后的任何git bash命令都没有问题。

答案 21 :(得分:0)

TL; DR:在Windows上,不要不要在远程URL中省略username@

在Linux和具有默认ssh的Windows上,您可以从远程URL中省略用户名,例如:

git clone server-name:/srv/git/repo-name

因为ssh的默认行为是仅使用您当前登录时使用的任何用户名。如果您使用的是Windows,并且已将git设置为使用plink.exe,以便可以使用pageant中加载的密钥,则此方法将不起作用,因为plink没有此功能相同的自动用户名行为,导致出现那些神秘的错误消息,因为它将提示输入用户名:

$ plink server-name
login as: _

对:

$ plink username@server-name
...logs you in...

如果您已经以某种方式克隆了存储库,则可以通过将.git/config添加到远程URL来修复username@中的远程对象。

答案 22 :(得分:0)

就我而言,基本上我需要重新启动Windows。

答案 23 :(得分:0)

当我进行git pull时,我遇到了同样的问题

git pull致命:协议错误:线路长度错误字符:

我将远程URL HTTP更改为SSH,并且对我有用。

git远程设置URL来源从“ HTTP ”到“ SSH

答案 24 :(得分:0)

就我而言,问题是由修改后的 /bin/ssh 引起的。 我和其他人在一台服务器上工作,默认的 /bin/ssh 被修改了, 它在启动时输出意外日志。 我将 /bin/ssh 恢复到正确的可执行文件并解决了它。

答案 25 :(得分:0)

好吧,我有同样的问题(Windows 7)。尝试通过密码获取回购。 我使用Git Bash + Plink(环境变量GIT_SSH)+ Pageant。 删除GIT_SSH(临时)对我有帮助。我不知道为什么我不能同时使用登录和RSA登录...

答案 26 :(得分:0)

在设置/版本控制/ git下将ssh可执行程序从内置的更改为nativ可以解决问题。

答案 27 :(得分:0)

这里的答案很晚,但希望它会对某人有所帮助。如果它的协议错误,它必须与您的本地git无法与远程git通信。如果你通过ssh克隆了repo会发生这种情况,之后的一段时间,你丢失了repo的密钥,或者你的ssh代理不再能找到这些密钥了。

解决方案

  1. 生成一个新密钥并将其添加到您的git repo或配置您的ssh代理以加载密钥,如果您仍然拥有密钥和&amp;不与别人在一起;)

  2. 另一个快速解决方法是转到.git目录,然后将config文件的[remote "origin"] urlgit修改为http所以不需要推送ssh密钥,它将恢复为询问您的用户名和密码。

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

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

答案 28 :(得分:0)

你总是可以通过http链接到你的git项目。您可以使用它而不是ssh链接。这只是你的选择

答案 29 :(得分:0)

它可能是您机器上的安全访问,您是否正在运行Pageant(这是一个腻子代理)?

答案 30 :(得分:0)

我们也碰到了这个。

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

我不知道有关错误的详细信息,但在我们的案例中,触发它的是服务器上的磁盘已满。

答案 31 :(得分:0)

错误转化为: 致命:协议错误:行长字符错误:fata

将git-upload-pack的位置添加到系统路径后

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

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

总之,对我而言,这似乎是一个软件错误。请注意,我不是git专家,这是我第一次使用git,我来自subversion和perforce。

答案 32 :(得分:-1)

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