Git Remote: Помилка: фатальна: помилка протоколу: символ неправильної довжини рядка: Unab


120

Я налаштував git-сервер і хочу зараз відштовхнути своє репо від клієнта. Я використав git push origin masterта отримав це повідомлення про помилку:

fatal: protocol error: bad line length character: Unab

Я не знаю, що не так. Я не знаю, що таке "Унаб". Я спробував змінити розмір оболонки, але це все ще "Unab". Я не можу знайти рішення для цього повідомлення про помилку.

Я налаштовую сервер за допомогою "санкціонованих_ ключів" та SSH. (Я можу підключитися до нього за допомогою SSH.)

Здається, це проблема з git?

BTW: Сервер налаштований у вікні Windows 7


У мене була аналогічна проблема із "фатальним: помилка протоколу: символ неправильної довжини рядка: Це", моє повідомлення про помилку було "Цей обліковий запис наразі недоступний".
hj '21

Відповіді:


117

Це повідомлення про помилку є дещо тупим, але те, що насправді намагається сказати вам, - це те, що віддалений сервер не відповів належним чином відповіді на git. Зрештою, на сервері, що запускає git-receive-packпроцес , виникла проблема .

У протоколі Git перші чотири байти повинні бути довжиною рядка. Натомість вони були персонажами Unab... що, мабуть, є початком якогось повідомлення про помилку. (тобто, ймовірно, " Unable to..." щось робити).

Що відбувається, коли ти біжиш ssh <host> git-receive-pack <path-to-git-repository>? Ви повинні побачити повідомлення про помилку, на якому ваш клієнт git перешкоджає, і ви, можливо, зможете його виправити.


10
Це, і ssh <host> /bin/trueнічого не повинно виводити.
Стефан Наве

9
У мене була ця сама проблема, і причиною було "відлуння". персонаж: .bas ".
snarkyname77

4
Так, і в цьому була моя проблема: у мене .bashrcна машині, яка розмістила сховище Git, з якого я намагався витягнути, була лінія, що викликала відлуння до стандартного виводу. (Тобто, я був власником сховища на віддаленій машині, тому саме ця моя .bashrcі викликала проблему.) Я використовував трюк, який дав користувач ruslo, в іншій відповіді, а саме - перенаправляв вихід цієї команди з stdout на stderr ( some_command 1>&2). Після цього git pullзнову працювали.
Teemu Leisti

2
З вищевказаною командою вихід просто зависає. У ньому перераховані всі мої гілки, по одній на рядок, а потім на остаточному надрукованому рядку я отримую висновок 0000 і курсор одразу після того, як ніби слід виписати інший рядок, але ніколи не завершується.
демонголем

2
Я ненавиджу натрапляти на семирічну проблему, але я отримую той же номер 0000 з git-rece-pack. Він зависає там, поки я не натискаю клавішу return чотири рази, після чого повідомляє ту саму помилку протоколу і вимикається.
Марк Е. Гамільтон

60

У мене була подібна проблема, але точне повідомлення про помилку було:

фатально: помилка протоколу: символ неправильної довжини рядка: Усін

Це в Windows, з GIT_SSHналаштованим на шлях plink.exePuTTY.

Можливі проблеми та рішення:

  • Переконайтесь, що шлях до plink.exeправильного. Наприклад, шлях у стилі Unix працює чудово/c/work/tools/PuTTY/plink.exe
  • Переконайтеся, що ключовий агент PuTTY ( pageant.exe) працює
  • Переконайтеся, що ключ-агент містить дійсний ключ для доступу до сервера

7
У мене була така ж проблема в Windows, і виявилася однакова першопричина з протилежної причини. Я намагався використовувати Cygwin (і вбудований Git SSH), але GIT_SSH було встановлено на C: \ ... \ plink.exe, що спричинило конфлікт. Після того, як я зняв це, все працювало нормально.
Метт Хольцман

11
Видалення запису GIT_SSH зі змінних оточення зробило для мене хитрість
chamalabey

Аналогічна помилка після оновлення GitExt довелося перезапустити виступ і переуповнити файл ключа .ppk.
Білл Долан

9
Я просто забув завантажити приватний ключ у конкурсі, чим закінчився fatal: protocol error: bad line length character: git@. Яке помилкове повідомлення про помилку
Людвіг

1
У моєму випадку (Windows 10) конкурс не виконується. Після того, як я запустив його і додав до нього приватний ключ, це Просто працював.
квітня

28

Для користувачів GitExtension:

Я зіткнувся з тією ж проблемою після оновлення git до 2.19.0

Рішення:

Інструменти> Налаштування> Розширення Git> SSH

Виберіть [ OpenSSH ] замість [ PuTTY ]

введіть тут опис зображення


Це саме те, що я зробив, коли ви отримуєте помилку fatal: protocol error: bad line length character: git@. Переконайтеся, що ключ SSH генерується та додається до GitLab . Можливо, був необхідний перезапуск Git Extensions .
тестування

20

У мене була така ж проблема після встановлення GIT на Windows. Спочатку це спрацювало; потім, через день (після перезавантаження ПК), це вже не сталося, і я отримав це:

$ 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


Для мене ситуація полягала в тому, що в студії Visual я отримав помилку: "Git не вдався із фатальною помилкою. Помилка протоколу: неправильна довжина рядка: gitu" щоразу, коли Windows перезапускалася. Процес конкурсу взагалі не був запущений. Мені потрібно було використовувати, наприклад, TortoiseGit, який вирішив це на тлі, а потім GIT працював у студії Visual як шарм.
Хонза П.

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

У моєму (Windows 10) випадку проблемою було виведення деяких команд, пов’язаних з докером, у моєму скрипті запуску init.cmd запуску cmd (який я створив за цими інструкціями: stackoverflow.com/questions/17404165/…). але це та сама головна. спасибі!
ET-CS

Так було для мене. У мене .bashrc була команда "банер". Коментуючи це, виправили цю проблему. Дякую :).
jamie

12

Після завантаження приватного ключа SSH в розширеннях Git ця проблема буде вирішена.


1
для мене - додавання приватного ключа ssh до конкурсу
Nick Grealy

10

Ви можете перенаправити будь-який вихід з .bashrcна stderr:

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

git ігнорує ці символи


Це зробило це для мене. У мене була заява rvm use 2.0.0-p353в моєму .bashrc, який повинен бути сплутати git pull. Після додавання 1>&2та спробу ще раз, git pullпрацював чудово.
Teemu Leisti

7

У мене була схожа проблема в Windows за допомогою Git Bash. Я постійно отримував цю помилку, намагаючись зробити клон git. Репозиторій знаходився у вікні Linux із встановленим GitLab.

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

Я переконався, що ключ ssh створений. Відкритий ключ був доданий у GitLab. Ssh-агент запускався і доданий створений ключ ( посилання github ).

У мене не вистачало варіантів, а потім нарешті спробував закрити Git Bash та відкрити його знову, натиснувши правою кнопкою миші «Запустити як адміністратор». Працювали після цього.


Я бачу те саме (Windows 10 64-розрядний), але запуск адміністратора не виправляє.
Ед Авіс

4
У мене є думка про те, що це викликає. Якщо у вас не налаштовано ключ ssh (або він чомусь не читабельний), тоді ssh запитає пароль. У Windows немає чіткого розрізнення між стандартним виходом та консольним виходом, тому підказка пароля переходить до stdout: "git @ what's password:". Git сприймає це як пошкоджений вихід протоколу.
Ed Avis

@EdAvis Дякую! У мене була така ж проблема, і прочитавши ваш коментар, я двічі перевірив свій ключовий агент (який, як правило, запускається при запуску на моїй машині). Виявилося, що вона не працює з якихось причин ...
Гріддо

5

Це може комусь допомогти. Коли я намагався клонувати проект із екземпляра EC2, я отримував помилку нижче:

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

Роздільна здатність для мене включає наступні етапи:

  1. Переконайтесь, що ключ SSH (загальнодоступний) доданий / оновлений в екземплярі EC2.
  2. Переконайтеся, що агент автентифікації (в моєму випадку його Pageant = Putty Authentication Agent) працює і завантажується відповідний приватний ключ.
  3. Використовуйте ідентифікатор ключа EC2 SSH для відкритого ключа для клонування git. Приклад:

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


4
Примітка. Це тому, що ви використовуєте планкін, і якщо ви це робите, plink <server_name> lsто перше, що плінк друкує до stdout, - це login as, здається, що git намагається інтерпретувати як щось важливе. Швидке виправлення - просто unset GIT_SSHі unset SVN_SSH. Детальніше тут
Під

@Повірно ви праві, на windows ці команди повинні допомогти: set GIT_SSH=іset SVN_SSH=
Максим Костромін

У мене була така ж проблема з TFS. Після додавання ключа id все працює добре, дякую!
Андре


3

Перевірте свої файли запуску в обліковому записі, який використовується для підключення до віддаленої машини, на наявність викликів "echo". Для оболонки Bash це були б ваші .bashrc та .bash_profile і т. Д. Едвард Томсон правильний у своїй відповіді, але конкретне питання, яке у мене виникло, полягає в тому, що при вході на сервер через ssh є певна роздруківка котла. Git отримає перші чотири байти цієї пластини котла і підвищить цю помилку. Тепер у цьому конкретному випадку я здогадуюсь, що "Unab" - це насправді робота "Unable ...", яка, ймовірно, вказує на те, що на хості Git щось інше не так.


3

У моєму випадку після вилучення вона була написана: fatal: protocol error: bad line length character: Pass. Крім того, після поштовху я отримав: fatal: protocol error: bad line length character: git@ Done.

Після перезавантаження Windows мені довелося запустити "агент PuTTY" (pageant.exe) знову і додати приватний ключ, який зник зі списку ключів.


2

FYI Я отримав таке саме повідомлення про помилку після того, як я оновив контейнер 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/isissue/63, де я зрозумів, що забув, що маю LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1в батьківському Dockerfile. Коментуючи це, виправили помилку.


2

У моєму випадку проблемою були 32-розрядні Putty та pageant.exe - він не може спілкуватися з 64-розрядною TortoisePlink.exe. Заміна 32-бітної Putty на 64-бітну версію вирішила проблему.


2

У мене була така ж помилка, "fatal: protocol error: bad line length character: shmi" де shmiв моєму випадку є ім’я користувача. Я перейшов SSH з PuTTY на OpenSSH в "Git Extensions->Settings->SSH". Це допомогло.


1

У мене була така ж проблема, як у Крістера Фернстрома. У моєму випадку це було повідомлення, яке я помістив у свій .bashrc, який нагадує мені зробити резервну копію, коли я не робив жодного за пару днів.


1

Можливо, хтось допоможе: Під час спроби клонувати проект, який я маю на моєму екземплярі AWS EC2, я отримав таку помилку:

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

Це було спричинено спробою ввести ssh як root замість EC2-USER. якщо ви насправді ssh, не роблячи клона git ..., ви побачите повідомлення про помилку в чомусь у рядку "Будь ласка, увійдіть із користувачем ec2" Колись я зробив клон git як користувач ec2, це було добре.


1

Я також стикаюся з цією помилкою раз у раз, але коли вона трапляється, це означає, що моя гілка не є сучасною, тому я повинен робити git pull origin <current_branch>


1

Git не вимагає введення пароля і не працює з аналогічним криптовалютним повідомленням "фатально: помилка протоколу: неправильна довжина рядка: користувач", якщо у вас також не встановлено автентифікацію приватного ключа .

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server розповідає, як вказати відкритий ключ на сервері. В основному додайте відкритий ключ до ~ / .ssh / санкціонованих_keys або ~ / .ssh / санкціонованих_keys2

Мені довелося трохи боротися, як надати приватний ключ Git Bash на машині Windows. Відповідь Дена Маккейна в /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801 описує це. Одним із доповнень до його відповіді, у моєму випадку очікувалося, що файл приватного ключа отримає назву id_rsa.pub


1

Для мене додавання одних і тих же даних про хости в Putty за допомогою приватного ключа (конвертувати за допомогою puttygen) працювало. Будь-які команди git bash після цього не мали проблем.


1

Якщо ви використовуєте Putty. Потім переконайтеся, що Pageant працює, і ваш приватний ключ завантажений у Pageant (клацніть правою кнопкою миші на піктограму Pageant на панелі завдань і натисніть «Переглянути клавіші» у меню, що вискочить).

В іншому випадку, коли ви це робите в cmd.exe:

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

ви отримуєте це повідомлення "фатально: помилка протоколу: символ неправильної довжини рядка:"


1

TL; DR: Do НЕ опускаємо username@в віддалених URL - адрес , коли на Windows.

У Linux та Windows з типовим ssh ти можеш опустити ім'я користувача з віддалених 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-адреси.


Додав ім’я користувача до віддаленого користувачем git remote set-url origin myusername@....
Максим Суслов

0

Перевірте, чи дозволений доступ до оболонки на сервері.


моя була "Привіт г". виявляється, що я перейшов на деякий веб-сайт із встановленням безпеки, і тепер мій логін git каже: "Привіт git! Ви успішно пройшли автентифікацію, але я не надаю інтерактивний доступ до оболонки." гадаю, погано треба це зняти ....
яскраво

0

Помилка, трансформована у: фатальна: помилка протоколу: символ неправильної довжини рядка: фата

після додавання місця розташування git-upload-pack до системного шляху.

Проблема, мабуть, полягає в апострофі, що додається навколо назви сховища: Погляд за допомогою інструмента, як Process Monitor (від sys Internals), який додав клієнт git. Здається, це проблема специфічної для Windows.

Я спробував той самий командний рядок у підказці сервера: повна помилка була "фатальною: не заданий сховище (або будь-який з батьківських каталогів): .git"

На закінчення, мені це здається програмною помилкою. Зауважте, що я не фахівець з git, це перший раз, коли я використовую git, я походжу від підриву та примусу.


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

Я не знаю примхливих подробиць про те, що пішло не так, але в нашому випадку, що викликало те, що диск на сервері був заповнений.


0

Це може бути доступ до безпеки на вашій машині, чи використовуєте Ви Pageant (який є шпаклівкою)?


0

Ви завжди можете мати http-посилання на свій git-проект. Ви можете використовувати це замість ssh-посилання. Це лише варіант, який у вас є


0

Ну, у мене був цей самий випуск (Windows 7). Спробуйте отримати репо за паролем. Я використовую Git Bash + Plink (змінна середовище GIT_SSH) + Pageant. Видалення GIT_SSH (тимчасове) мені допомагає. Я не знаю, чому я не можу одночасно використовувати логін для проходу та входу з RSA ...


0

Тут пізня відповідь, але сподіваюся, що це комусь допоможе. Якщо це помилка протоколу, він повинен щось робити з вашим локальним git, не в змозі спілкуватися з віддаленим git. Це може статися, якщо ви клонували репо через Ssh, а десь пізніше ви втратили ключі від репо або ваш агент ssh більше не може знайти ці ключі.

Рішення

  1. Створіть новий ключ і додайте до нього своє git repo або налаштуйте агента ssh для завантаження ключів, якщо у вас ще є ключі та не з кимось іншим;)

  2. Інші швидко виправити це , щоб перейти до .gitкаталогу і редагувати configфайл [remote "origin"] urlвід gitдо httpтак що ключі 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/*

0

Змінення ssh exectuable з вбудованого на nativ у налаштуваннях / контролі версій / git зробило для мене трюк.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.