133

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

fatal: protocol error: bad line length character: Unab

我不知道怎么了。我不知道“Unab”是什么。我试图调整外壳的大小,但它仍然是“Unab”。我找不到此错误消息的解决方案。

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

这似乎是一个git问题?

顺便说一句:服务器设置在 Windows 7 VM 中

4

34 回答 34

127

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

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

跑步时会发生什么ssh <host> git-receive-pack <path-to-git-repository>?您应该会看到您的 git 客户端正在抱怨的错误消息,并且您可能能够更正它。

于 2011-11-17T22:29:15.023 回答
68

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

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

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

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

  • 确保路径plink.exe正确。例如,Unix 风格的路径也可以正常工作/c/work/tools/PuTTY/plink.exe
  • 确保 PuTTY ( pageant.exe) 的密钥代理正在运行
  • 确保密钥代理包含访问服务器的有效密钥
于 2016-03-10T10:12:35.623 回答
36

对于 GitExtension 用户:

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

解决方案:

工具 > 设置 > Git 扩展 > SSH

选择 [ OpenSSH ] 而不是 [ PuTTY ]

在此处输入图像描述

于 2018-10-01T06:58:31.400 回答
25

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

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

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

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

于 2017-04-11T11:40:28.323 回答
18

也许您在服务器的 .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
于 2013-01-27T14:38:39.913 回答
12

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

于 2015-12-16T15:32:51.313 回答
10

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

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

git 会忽略这个符号

于 2013-05-17T09:12:07.943 回答
7

我在使用 Git Bash 的 Windows 上遇到了类似的问题。尝试执行 git clone 时,我不断收到此错误。该存储库位于安装了 GitLab 的 Linux 机器上。

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

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

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

于 2015-11-04T02:07:18.827 回答
6

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

RequestTTY force

进入 .ssh/config

对此发表评论允许它工作

于 2017-01-10T16:24:00.663 回答
5

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

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

我的解决方案包括以下步骤:

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

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

于 2017-01-18T17:10:45.790 回答
4

在我的情况下,它是在 fetch 之后写成的:fatal: protocol error: bad line length character: Pass。推后我也得到了:fatal: protocol error: bad line length character: git@ Done

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

于 2018-02-05T08:16:49.600 回答
4

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

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

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

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

于 2019-02-21T11:00:09.777 回答
3

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

于 2013-07-30T12:54:27.070 回答
3

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通过将 添加username@到远程 URL 来修复您的远程。

于 2019-06-28T08:25:12.310 回答
2

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

于 2015-06-08T19:11:22.180 回答
2

仅供参考,在将 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,在那里我意识到我忘记了我LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1在父 Dockerfile 中有一个。评论出来修复了错误。

于 2015-08-28T02:30:48.213 回答
2

就我而言,问题是 32 位 Putty 和 pageant.exe - 它无法与 64 位 TortoisePlink.exe 通信。用 64 位版本替换 32 位 Putty 解决了这个问题。

于 2017-05-16T19:47:17.420 回答
2

我有同样的错误"fatal: protocol error: bad line length character: shmi" ,在shmi我的情况下是用户名。我在"Git Extensions->Settings->SSH". 它有帮助。

于 2017-10-13T20:56:32.370 回答
1

我和 Christer Fernstrom 有同样的问题。就我而言,这是我在 .bashrc 中输入的一条消息,提醒我在几天没有备份的情况下进行备份。

于 2013-04-06T04:52:26.757 回答
1

以下内容可能对某人有所帮助:尝试克隆我在 AWS EC2 实例上拥有的项目时,出现以下错误:

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

这是由于尝试以 root 身份而不是 EC2-USER 身份进行 ssh 造成的。如果您实际上 ssh 而不执行 git clone ...您将在“请使用 ec2-user 登录”行中看到错误消息一旦我以 ec2-user 身份执行了 git clone 就很好了。

于 2015-04-16T02:04:57.883 回答
1

如果您也没有设置私钥身份验证,Git 不会提示输入密码并且会失败并显示类似的神秘消息“致命:协议错误:错误的行长度字符:用户” 。

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

于 2017-06-15T19:49:33.343 回答
1

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

于 2017-09-20T14:17:17.153 回答
0

Check if Shell access is allowed on the server.

于 2012-01-27T18:54:10.057 回答
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

我不知道发生了什么问题的详细信息,但在我们的例子中,触发它的是服务器上的磁盘已满。

于 2014-12-16T09:21:17.370 回答
0

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

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

问题似乎是在存储库名称周围添加了一个撇号:使用 git 客户端添加的诸如 Process Monitor(来自 sys internals)之类的工具进行查看。这似乎是一个特定于 git 的 windows 问题。

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

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

于 2012-12-29T18:02:49.493 回答
0

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

于 2016-04-29T16:07:48.710 回答
0

您始终可以拥有指向您的 git 项目的 http 链接。您可以使用它代替 ssh 链接。这只是您拥有的一个选项

于 2016-11-25T06:39:27.753 回答
0

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

于 2016-12-26T08:48:19.570 回答
0

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

解决方案

  1. 生成一个新密钥并将其添加到您的 git repo 或配置您的 ssh 代理以加载密钥,如果您仍然拥有密钥而不是其他人;)

  2. 另一个快速解决方法是转到您的.git目录并编辑config文件的[remote "origin"] urlfrom gittohttp以便不需要推送 ssh 密钥,它将恢复为询问您的用户名和密码。

    [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/*
于 2017-07-06T21:00:29.130 回答
0

我做 git pull 时遇到了同样的问题

git pull 致命:协议错误:错误的行长度字符:<htm 致命:远程端意外挂断

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

git remote set-url origin " HTTP " 到 " SSH "

于 2020-10-06T11:22:47.780 回答
0

在 settings/version control/git 下将 ssh 可执行文件从 builtin 更改为 nativ 对我有用。

于 2018-07-18T12:18:53.407 回答
0

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

于 2021-07-18T14:30:20.197 回答
0

有一些类似的问题,但git fatal: protocol error: bad line length character: Cann和我无法摆脱它,直到我摆脱了所有plink.exe依赖项(已通过安装程序安装了 Putty choco)但也从.gitconfig文件sshCommand = plink -batch.

于 2021-11-02T14:28:52.237 回答
-2

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

于 2019-09-19T07:21:09.860 回答