Git Remote: Error: Death: protocol Error: bad line length 字符: Unab

我设置了一个 git 服务器,现在想要从客户端推出我的回购。 我使用 git push origin master得到了这个错误消息:

fatal: protocol error: bad line length character: Unab

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

我将服务器设置为使用“ authored_ keys”和 SSH (我可以使用 SSH 连接到它)

看起来是个饭桶问题?

顺便说一下: 服务器是在 Windows7VM 中设置的

224075 次浏览

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

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

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

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

错误转换为: 协议错误: 错误的行长字符: fata

在向系统路径添加 git-upload- 包的位置之后。

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

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

总而言之,在我看来,这就像是一个软件缺陷。请注意,我不是一个 git 专家,这是我第一次使用 git,我来自颠覆和强制。

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

我和克里斯特 · 弗恩斯特罗姆有同样的问题。在我的情况下,这是一个信息,我已经在我的。Bashrc 提醒我做一个备份,当我没有做一个在一两天。

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

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

Git 将忽略这些符号

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

我们也遇到了这个。

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

我不知道到底是什么地方出了问题,但在我们的案例中,引发问题的原因是服务器上的磁盘已经满了。

以下内容可能对某人有帮助: 当试图克隆我的 AWS EC2实例上的一个项目时,我得到了以下错误:

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

这是由于试图将 ssh 作为 root 用户而不是 EC2-USER 引起的。 如果您实际上不使用 git 克隆 ssh... ... 您将看到类似于“ Please login with ec2-user”的错误消息 有一次我以 ec2用户的身份做了一个 git 克隆,它很棒。

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

仅供参考,我在将 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。注释掉它修复了错误。

我在 Windows 上使用 Git Bash 时也遇到过类似的问题。在尝试做 git 克隆时,我一直得到这个错误。存储库在安装了 GitLab 的 Linux 机器上。

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

我确保生成了 ssh 密钥。在 GitLab 上添加了公钥。Ssh-agent 正在运行,并添加了生成的密钥(Github 链接)。

我用完了所有选项,然后终于试着关闭 Git Bash,并通过右键单击“作为管理员运行”再次打开它。之后就开始工作了。

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

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

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

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

可能出现的问题和解决办法:

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

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

你总是可以有你的 git 项目的 http 链接。您可以使用它来代替 ssh 链接。这只是你的一个选择

嗯,我也有同样的问题(Windows7)。试着用密码获得回购。 我使用 GIT Bash + Plink (环境变量 GIT _ SSH) + Pageant。 删除 GIT _ SSH (临时)对我有帮助。我不知道为什么我不能使用登录通过传递和登录与 RSA 在同一时间..。

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

RequestTTY force

进入. ssh/config

评论这个允许它工作

这也许能帮到某人。当我试图从一个 EC2实例克隆一个项目时,我得到了以下错误:

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

我的决议包括以下步骤:

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

    Git 克隆 SSH://{ SSH 密钥 ID }@ someaccount.amazonaws.com/v1/repos/repo1

在 Windows 上安装 GIT 之后,我也遇到了同样的问题。一开始还能用,一天后(在电脑重启后)就不行了,于是我得到了这个:

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

问题是在重启后,自动启动的 Putty“ pageant.exe”不再有私钥活动。当您在选美比赛中添加一个键时,默认情况下它不是一个持久设置。我只需要再加一把钥匙,就没问题了。因此,在这种情况下,有必要让盛会自动加载密钥,如下所述:

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

在我的例子中,问题是32位 Putty 和 pageant.exe-它不能与64位 TortoisePlink.exe 通信。用64位版本取代32位腻子解决了这个问题。

Git 不提示输入密码,并且类似的隐晦消息 如果你没有你的私人密钥认证也会导致失败,这个消息是“致命的: 协议错误: 错误的行长字符: 用户”。

Https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server 告诉我们如何在服务器上指定公钥,基本上就是将公钥添加到 ~/. ssh/ 授权的 _ keys 或 ~/. ssh/授权的 _ 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。酒吧

这里回答晚了,但是希望能对某人有所帮助。如果这是一个协议错误,那么它必须处理本地 git 无法与远程 git 通信的问题。如果您通过 ssh 克隆了回购,并且在某个时候丢失了回购的密钥,或者您的 ssh 代理再也找不到这些密钥,那么就会发生这种情况。

解决方案

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

  2. 另一个快速修复方法是进入 .git目录,将 config文件的 [remote "origin"] urlgit编辑到 http,这样就不需要按 ssh 键,它将恢复到询问用户名和密码。

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

Change to

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

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

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

在我的情况下,在提取之后,它被写成: fatal: protocol error: bad line length character: Pass。同样在推送之后,我得到了: < code > death: protocol error: bad line length 字符: git@ 完成

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

在设置/版本控制/git 下将 ssh 可执行文件从内置更改为 nativ 对我来说很有效。

对于 GitExtension 用户:

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

解决方案:

工具 > 设置 > Git 扩展 > SSH

选择[ OpenSSH]而不是[ < em > PuTTY ]

enter image description here

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

否则,在 cmd.exe 中执行:

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

你会得到这样一条消息,致命的: 协议错误: 错误的行长字符:

在 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...

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

我开车的时候也遇到过同样的问题

Git pull 足迹: protocol error: bad line length 字符: < htm 足迹: 远程终端意外挂起

我将我的远程 url HTTP 改为 SSH,它对我很有用。

Git Remote set-url source HTTP”到“ SSH

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

有一些类似的问题,但 协议错误: 错误的行长字符: Cann和我不能摆脱它,直到我摆脱了所有的 plink.exe依赖(已经安装了腻子通过 choco安装程序) ,但也删除了下一行从 .gitconfig文件 sshCommand = plink -batch

我知道这是一个相当老的线程,但是当我有一个非常类似的错误消息时,我只从这篇文章中得到了关于调查 SSH 的提示。我忘了我放了一个带“ echo”的 shrc 来测试。因此,如果您正在运行某种形式的 UNIX,并得到这个错误,那么尝试查看以下文件:

  • /etc/sshrc: 运行任何用户登录
  • ~/.ssh/rc: 针对特定用户登录运行

如果这些脚本具有 stdout,那么我认为它会混淆 SSH 密钥交换过程。至少对我来说是这样。移除回声线就解决了我的问题。