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

use*_*899 101 git ssh authorized-keys

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

fatal: protocol error: bad line length character: Unab
Run Code Online (Sandbox Code Playgroud)

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

我用"authorized_keys"和SSH设置服务器.(我可以使用SSH连接到它.)

这似乎是一个git问题?

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

Edw*_*son 105

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

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

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

  • 那,和`ssh <host>/bin/true`不应该输出任何东西. (8认同)
  • 我有同样的问题,原因是我的.bashrc中的'echo'.bashrc"',所以而不是"致命:协议错误:线路长度错误字符:Unab"我看到"致命:协议错误:线路长度不好character:.bas". (7认同)
  • 我讨厌碰到一个七年前的问题,但是我用 git-receive-pack 遇到了同样的 0000 问题。它一直挂在那里,直到我按四次返回,此时它报告相同的协议错误并退出。 (6认同)
  • 是的,这也是我的问题:托管我试图从中拉出的Git存储库的机器上的`.bashrc`有一条线产生了标准输出的回声.(也就是说,我是远程机器上存储库的所有者,所以我的`.bashrc`导致了这个问题.)我在另一个答案中使用了用户ruslo给出的技巧,即重定向该命令的输出stdout到stderr(`some_command 1>&2`).在那之后,`git pull`再次起作用. (4认同)
  • 使用上面的命令,输出就会挂起.它列出了我的所有分支,每行一个,然后在最后的打印行上,我得到输出"0000",光标紧跟在后面,好像另一行要写出但从未完成. (2认同)
  • 虽然这个答案很有趣,但它几乎没有为问题提供真正的解决方案。 (2认同)
  • @frogeyedpeas 只需解析 URL 或 SCP 路径。如果您要克隆“git@github.com:/user/repo.git”,则主机为“github.com”,路径为“user/repo.git”。因此运行`ssh github.com git-receive-pack /user/repo.git`。 (2认同)

Sto*_*ica 53

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

致命:协议错误:行长度不好字符:Usin

这是在Windows中,GIT_SSH设置为plink.exePuTTY 的路径.

可能的问题和解决方案

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

  • 从环境变量中删除GIT_SSH条目对我来说很有用 (10认同)
  • 我在Windows上遇到了同样的问题,结果却是出于相反的原因.我试图使用Cygwin(和嵌入式Git SSH),但GIT_SSH设置为C:\ ...\plink.exe导致冲突.一旦我删除了这一切一切正常. (7认同)
  • 我只是忘了在pageant中加载私钥,结果是`fatal:protocol error:bad line length character:git @`.多么误导性的错误信息. (6认同)
  • 在我的情况下(Windows 10)选美没有运行。一旦我启动它并将私钥添加到它,这就是有效的。 (3认同)

Chr*_*rom 17

也许你在服务器的.bashrc中有一个产生输出的声明.我,例如有这个:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use ruby-1.9.3-p194@rails32
Run Code Online (Sandbox Code Playgroud)

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

rvm use ruby-1.9.3-p194@rails32 > /dev/null
Run Code Online (Sandbox Code Playgroud)


Ami*_*hah 17

对于GitExtension用户:

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

解:

工具>设置> Git扩展> SSH

选择[ OpenSSH ]而不是[ PuTTY ]

在此输入图像描述


小智 16

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

$ git pull
fatal: protocol error: bad line length character: git@
Run Code Online (Sandbox Code Playgroud)

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

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


小智 11

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

  • 对我来说 - 将 ssh 私钥添加到选美比赛中 (2认同)

小智 9

您可以将任何输出重定向.bashrcstderr:

# inside .bashrc
echo 'some error/warning/remind message' 1>&2
Run Code Online (Sandbox Code Playgroud)

git会忽略这个符号


syc*_*lee 7

我在使用Git Bash的Windows上遇到了类似的问题.在尝试进行git克隆时,我一直收到此错误.存储库位于安装了GitLab的Linux机器上.

git clone git@servername:path/to/repo
fatal: protocol error: bad line length character: git@
Run Code Online (Sandbox Code Playgroud)

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

我没有选择,然后最终尝试关闭Git Bash并通过右键单击"以管理员身份运行"再次打开它.在那之后工作.

  • 我对这是什么原因有所预感.如果您没有设置ssh密钥对(或由于某种原因无法读取),则ssh会提示输入密码.在Windows上,标准输出和控制台输出之间没有明显的区别,因此密码提示转到stdout:"git @ whatever's password:".这被git看作是损坏的协议输出. (4认同)

Thu*_*GMT 6

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

RequestTTY force
Run Code Online (Sandbox Code Playgroud)

进入.ssh/config

对此进行评论可以使其正常工作


小智 5

这可能会帮助某人。当我尝试从EC2实例克隆项目时,出现以下错误:

Cloning into 'repo1'...
fatal: protocol error: bad line length character: logi
Run Code Online (Sandbox Code Playgroud)

对我来说,解决方法包括以下步骤:

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

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

  • 注意:这是因为您正在使用plink,并且如果执行`plink &lt;server_name&gt; ls`,则plink打印到stdout的第一件事就是`login as`,git似乎试图将其解释为重要内容。一个快速的解决方法是简单地“取消设置GIT_SSH”和“未设置SVN_SSH”。更多信息[此处](https://www.bountysource.com/issues/30691481-username-required-when-cloning-with-plink) (3认同)