Git Remote: Błąd: krytyczny: błąd protokołu: zła długość linii znak: Unab

120

Skonfigurowałem serwer git i chcę teraz najpierw wypchnąć moje repozytorium z klienta. Użyłem git push origin masteri otrzymałem ten komunikat o błędzie:

fatal: protocol error: bad line length character: Unab

Nie wiem co jest źle. Nie wiem, co to jest „Unab”. Próbowałem zmienić rozmiar powłoki, ale nadal jest to „Unab”. Nie mogę znaleźć rozwiązania tego komunikatu o błędzie.

Skonfigurowałem serwer za pomocą „Authorized_keys” i SSH. (Mogę się z nim połączyć, używając SSH.)

Wydaje się, że to problem z gitem?

BTW: serwer jest skonfigurowany na maszynie wirtualnej z systemem Windows 7

user437899
źródło
Miałem podobny problem z „fatal: błąd protokołu: zła długość linii: ten”, mój komunikat o błędzie brzmiał: „To konto jest obecnie niedostępne”.
hj '21

Odpowiedzi:

117

Ten komunikat o błędzie jest nieco tępy, ale tak naprawdę próbuje ci powiedzieć, że zdalny serwer nie odpowiedział poprawną odpowiedzią git. Ostatecznie wystąpił problem na serwerze z uruchomionym git-receive-packprocesem.

W protokole Git pierwsze cztery bajty powinny być długością linii. Zamiast tego były to postacie Unab... co jest prawdopodobnie początkiem jakiegoś komunikatu o błędzie. (tj. prawdopodobnie " Unable to..." coś zrób).

Co się dzieje, kiedy biegasz ssh <host> git-receive-pack <path-to-git-repository>? Powinieneś zobaczyć komunikat o błędzie, który pokazuje twój klient git, i być może będziesz w stanie go poprawić.

Edwarda Thomsona
źródło
10
To i ssh <host> /bin/truenie powinno niczego wyświetlać.
Stefan Näwe,
9
Miałem ten sam problem i przyczyną było „echo” .bashrc ”” w moim .bashrc, więc zamiast „fatal: błąd protokołu: zła długość linii znak: Unab„ widziałem ”fatal: błąd protokołu: zła długość linii znak: .bas ".
snarkyname77
4
Tak, to też był mój problem: mój .bashrckomputer, na którym znajdowało się repozytorium Git, z którego próbowałem wyciągnąć, miał wiersz, który generował echo na standardowe wyjście. (To znaczy byłem właścicielem repozytorium na zdalnej maszynie, więc to mój .bashrcproblem spowodował). Użyłem sztuczki podanej przez użytkownika ruslo w innej odpowiedzi, a mianowicie przekierowania wyjścia tego polecenia ze stdout na stderr ( some_command 1>&2). Potem git pullznowu pracował.
Teemu Leisti
2
Przy powyższym poleceniu wyjście po prostu się zawiesza. Zawiera listę wszystkich moich gałęzi, po jednej w każdym wierszu, a następnie w ostatnim wydrukowanym wierszu otrzymuję dane wyjściowe 0000 i kursor bezpośrednio po nim, tak jakby kolejna linia miała zostać zapisana, ale nigdy się nie kończy.
demongolem
2
Nienawidzę uderzać w problem sprzed siedmiu lat, ale ten sam numer 0000 pojawia się w przypadku pakietu git-otrzymasz-pack. Wisi tam, aż czterokrotnie naciśnę klawisz powrotu, po czym zgłasza ten sam błąd protokołu i kończy pracę.
Mark E. Hamilton,
60

Miałem podobny problem, ale dokładny komunikat o błędzie brzmiał:

fatal: błąd protokołu: zła długość linii znak: Usin

To jest w systemie Windows, z GIT_SSHustawioną ścieżką plink.exePuTTY.

Możliwe problemy i rozwiązania:

  • Upewnij się, że ścieżka do plink.exejest poprawna. Na przykład ścieżka w stylu uniksowym również działa dobrze/c/work/tools/PuTTY/plink.exe
  • Upewnij się, że kluczowy agent PuTTY ( pageant.exe) jest uruchomiony
  • Upewnij się, że agent kluczy zawiera prawidłowy klucz dostępu do serwera
janos
źródło
7
Miałem ten sam problem w systemie Windows i okazało się, że jest to ta sama główna przyczyna z przeciwnego powodu. Próbowałem użyć Cygwin (i osadzonego Git SSH), ale GIT_SSH został ustawiony na C: \ ... \ plink.exe, co powoduje konflikt. Po usunięciu tego wszystko działało dobrze.
Matt Holtzman
11
Usunięcie wpisu GIT_SSH ze zmiennych środowiskowych
załatwiło sprawę
Podobny błąd po aktualizacji GitExt musiał ponownie uruchomić konkurs i ponownie zaimportować plik klucza .ppk.
Bill Dolan
9
Po prostu zapomniałem załadować klucza prywatnego w konkursie, który się zakończył fatal: protocol error: bad line length character: git@. Co za mylący komunikat o błędzie.
Ludwig
1
W moim przypadku (Windows 10) konkurs nie był uruchomiony. Po uruchomieniu i dodaniu do niego klucza prywatnego, to po prostu zadziałało.
kwietnia
29

Dla użytkowników GitExtension:

Napotkałem ten sam problem po aktualizacji gita do 2.19.0

Rozwiązanie:

Narzędzia> Ustawienia> Rozszerzenia Git> SSH

Wybierz [ OpenSSH ] zamiast [ PuTTY ]

wprowadź opis obrazu tutaj

Amit Shah
źródło
Dokładnie to zrobiłem, kiedy pojawi się błąd fatal: protocol error: bad line length character: git@. Upewnij się, że klucz SSH został wygenerowany i dodany do GitLab . Być może ponowne uruchomienie rozszerzeń Git było konieczne.
testowanie
20

Miałem ten sam problem po zainstalowaniu GIT w systemie Windows. Na początku to działało; potem, dzień później (po ponownym uruchomieniu komputera), już się nie udało i otrzymałem to:

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

Problem polegał na tym, że po ponownym uruchomieniu automatycznie uruchamiany program Putty „pageant.exe” nie miał już aktywnego klucza prywatnego. Gdy dodajesz klucz w konkursie, domyślnie nie jest to trwałe ustawienie. Po prostu musiałem ponownie dodać klucz i działało dobrze. W tym przypadku konieczne jest więc automatyczne ładowanie klucza przez stronę, jak omówiono tutaj:

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

MaeseDude
źródło
Dla mnie sytuacja była taka, że ​​w Visual Studio otrzymywałem błąd: "Git nie powiódł się z błędem krytycznym. Błąd protokołu: zła długość linii znak: gitu" za każdym razem, gdy Windows był restartowany. Proces korowodu w ogóle się nie rozpoczął. Musiałem użyć np. TortoiseGit, który rozwiązał to w tle, a potem GIT działał w Visual Studio jak urok.
Honza P.
18

Może masz instrukcję w .bashrc serwera, która generuje dane wyjściowe. Ja na przykład miałem to:

[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
rvm use ruby-1.9.3-p194@rails32

W takim przypadku wynik użycia rvm zostanie (błędnie) zinterpretowany jako pochodzący z git. Więc zamień to na:

rvm use ruby-1.9.3-p194@rails32 > /dev/null
Christer Fernstrom
źródło
W moim przypadku (Windows 10) problemem był wynik niektórych poleceń związanych z dockerem w moim skrypcie startowym cmd init.cmd (który utworzyłem zgodnie z tymi instrukcjami: stackoverflow.com/questions/17404165/ ...). ale to ta sama zasada. Dziękuję Ci!
ET-CS
Tak było w przypadku mnie. Miałem polecenie „banner” w moim .bashrc. Skomentowanie go rozwiązało problem. Dziękuję Ci :).
jamie
12

Po załadowaniu klucza prywatnego SSH w rozszerzeniach Git ten problem zostanie rozwiązany.

Stanley Emmanuel
źródło
1
dla mnie - dodanie klucza prywatnego ssh do konkursu
Nick Grealy
10

Możesz przekierować dane wyjściowe z .bashrcdo stderr:

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

git zignoruje te symbole


źródło
To zrobiło to dla mnie. Miałem rvm use 2.0.0-p353w swoim oświadczeniu .bashrc, które musiało być zdezorientowane git pull. Po dołączeniu 1>&2i ponownej próbie git pulldziałało dobrze.
Teemu Leisti
7

Miałem podobny problem w systemie Windows przy użyciu Git Bash. Ciągle otrzymywałem ten błąd podczas próby wykonania klonu git. Repozytorium znajdowało się na Linux-ie z zainstalowanym GitLabem.

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

Upewniłem się, że klucz ssh został wygenerowany. Klucz publiczny został dodany na GitLab. Ssh-agent działał, a wygenerowany klucz został dodany ( link do github ).

Skończyły mi się opcje, a następnie w końcu spróbowałem zamknąć Git Bash i otworzyć go ponownie, klikając prawym przyciskiem myszy „Uruchom jako administrator”. Pracowałem potem.

syclee
źródło
Widzę to samo (Windows 10 64-bitowy), ale uruchomienie jako administrator tego nie rozwiązuje.
Ed Avis
4
Mam przeczucie, co to powoduje. Jeśli nie masz skonfigurowanej pary kluczy ssh (lub z jakiegoś powodu nie można jej odczytać), ssh zapyta o hasło. W systemie Windows nie ma wyraźnego rozróżnienia między standardowym wyjściem a wyjściem konsoli, więc monit o hasło przechodzi do stdout: "git @ cokolwiek jest hasło:". Jest to postrzegane przez git jako uszkodzony wynik protokołu.
Ed Avis
@EdAvis Thanks! Miałem ten sam problem i po przeczytaniu twojego komentarza dwukrotnie sprawdziłem mojego głównego agenta (który zwykle jest uruchamiany podczas uruchamiania na moim komputerze). Okazało się, że z jakiegoś powodu nie działa ...
Griddo
5

To może komuś pomóc. Kiedy próbowałem sklonować projekt z instancji EC2, otrzymywałem następujący błąd:

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

Rozwiązanie dla mnie obejmuje poniższe kroki:

  1. Upewnij się, że klucz SSH (publiczny) został dodany / zaktualizowany w instancji EC2.
  2. Upewnij się, że agent uwierzytelniania (w moim przypadku jego Pageant = Putty Authentication Agent) jest uruchomiony i odpowiedni klucz prywatny jest załadowany.
  3. Użyj identyfikatora klucza EC2 SSH jako klucza publicznego dla git clone. Przykład:

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

acveer
źródło
4
Uwaga: Dzieje się tak, ponieważ używasz plink, a jeśli to zrobisz, plink <server_name> lspierwszą rzeczą, którą plink drukuje na stdout, jest to login as, że git wydaje się próbować zinterpretować jako coś ważnego. Szybkim rozwiązaniem jest proste unset GIT_SSHi unset SVN_SSH. Więcej informacji tutaj
Pod
@Pod masz rację, w windowsie te polecenia powinny pomóc: set GIT_SSH=iset SVN_SSH=
Maksim Kostromin
Miałem ten sam problem z TFS. Po dodaniu identyfikatora klucza wszystko działa dobrze, dzięki!
Andre Hofmeister
4

Dla mnie to dlatego, że niedawno dodałem

RequestTTY force

do .ssh / config

skomentowanie tego pozwoliło to zadziałać

Czw 01 Sty 1970 000000 GMT
źródło
3

Sprawdź, czy w plikach startowych na koncie używanym do łączenia się ze zdalnym komputerem znajdują się instrukcje „echo”. W przypadku powłoki Bash byłyby to pliki .bashrc i .bash_profile itp. Edward Thomson ma rację w swojej odpowiedzi, ale specyficzny problem, którego doświadczyłem, dotyczy wydruku płyty kotłowej po zalogowaniu się do serwera przez ssh. Git pobierze pierwsze cztery bajty tej płyty kotłowej i zgłosi ten błąd. Teraz w tym konkretnym przypadku zgadnę, że „Unab” jest w rzeczywistości pracą „Unable ...”, co prawdopodobnie oznacza, że ​​na hoście Git jest coś nie tak.

snarkyname77
źródło
3

W moim przypadku po sprowadzić było napisane: fatal: protocol error: bad line length character: Pass. Również po naciśnięciu mam: fatal: protocol error: bad line length character: git@ Done.

Po ponownym uruchomieniu Windows musiałem ponownie uruchomić "agenta PuTTY" (pageant.exe) i dodać klucz prywatny, który zniknął z listy kluczy.

CoolMind
źródło
2

FYI Otrzymałem ten sam komunikat o błędzie po uaktualnieniu kontenera CentOS6 do CentOS7 - niektóre operacje git zaczęły kończyć się niepowodzeniem podczas budowania kontenera, np.

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

Uruchomienie ssh spowodowało błąd, który mogłem wyszukać:

# ssh [email protected]
Invalid clock_id for clock_gettime: 7

To doprowadziło mnie do https://github.com/wolfcw/libfaketime/issues/63, gdzie zdałem sobie sprawę, że zapomniałem, że mam LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1w nadrzędnym pliku Dockerfile. Skomentowanie tego naprawiło błąd.

jamshid
źródło
2

W moim przypadku problemem był 32-bitowy program Putty i pageant.exe - nie może się on komunikować z 64-bitowym TortoisePlink.exe. Zastąpienie 32-bitowego Putty wersją 64-bitową rozwiązało problem.

Nikolai Koudelia
źródło
2

Miałem ten sam błąd, w "fatal: protocol error: bad line length character: shmi" którym shmiw moim przypadku jest nazwa użytkownika. Zmieniłem SSH z PuTTY na OpenSSH w "Git Extensions->Settings->SSH". Pomogło.

Val
źródło
1

Miałem ten sam problem co Christer Fernstrom. W moim przypadku była to wiadomość, którą umieściłem w swoim .bashrc, która przypomina mi o zrobieniu kopii zapasowej, gdy nie zrobiłem jej od kilku dni.

Christopher Vickery
źródło
1

Poniższe mogą komuś pomóc: Podczas próby sklonowania projektu, który mam na mojej instancji AWS EC2, otrzymuję następujący błąd:

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

Było to spowodowane próbą ssh jako root zamiast EC2-USER. jeśli faktycznie ssh bez wykonania klonu git ... zobaczysz komunikat błędu w czymś w rodzaju „Proszę zaloguj się przez ec2-user”. Kiedy wykonałem klon git jako użytkownik ec2, było dobrze.

ConfusedDeer
źródło
1

czasami napotykam ten błąd, ale kiedy się pojawia, oznacza to, że mój oddział nie jest aktualny, więc muszę to zrobić git pull origin <current_branch>

bonbon.langes
źródło
1

Git nie pyta o hasło i kończy się niepowodzeniem z podobnym tajemniczym komunikatem „fatal: protocol error: zła długość linii znak: użytkownik”, jeśli nie masz również konfiguracji uwierzytelniania za pomocą klucza prywatnego .

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server mówi, jak określić klucz publiczny na serwerze. Zasadniczo dodaj klucz publiczny do ~ / .ssh / autoryzowane_klucze lub ~ / .ssh / autoryzowane_klucze2

Musiałem trochę się zmagać, jak zapewnić klucz prywatny do Git Bash na komputerze z systemem Windows. Opisuje to odpowiedź Dana McClaina w /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801 . Jeden dodatek do jego odpowiedzi, w moim przypadku plik klucza prywatnego miał nosić nazwę id_rsa.pub

Sandip
źródło
1

Dla mnie dodanie tych samych danych hosta do Putty z kluczem prywatnym (konwersja z puttygen) działało. Wszelkie późniejsze polecenia git bash nie powodowały żadnych problemów.

David Aleu
źródło
1

Jeśli używasz Putty. Następnie upewnij się, że Pageant jest uruchomiony, a Twój klucz prywatny jest załadowany do programu Pageant (kliknij prawym przyciskiem myszy ikonę Pageant na pasku zadań i kliknij „Wyświetl klucze” w menu, które się pojawi).

W przeciwnym razie, gdy robisz to w cmd.exe:

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

pojawia się ten komunikat „krytyczny: błąd protokołu: zła długość linii:”

Deweloper Marius Žilėnas
źródło
1

TL; DR: Czy nie pominąć username@w swoich zdalnych adresów URL, gdy w systemie Windows.

W systemie Linux i Windows z domyślnym ssh możesz pominąć nazwę użytkownika w zdalnych adresach URL, na przykład:

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

Ponieważ domyślnym zachowaniem ssh jest użycie dowolnej nazwy użytkownika, za pomocą której jesteś zalogowany. Jeśli korzystasz z systemu Windows i skonfigurowałeś git do używania plink.exe, abyś mógł używać klucza załadowanego do twojego pageant, to nie zadziała, ponieważ plinknie ma tego samego automatycznego zachowania nazwy użytkownika, co powoduje te tajemnicze komunikaty o błędach, ponieważ tak będzie monit o podanie nazwy użytkownika:

$ plink server-name
login as: _

Przeciw:

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

Jeśli w jakiś sposób sklonowałeś już repozytorium, możesz naprawić piloty w swoim .git/config, dodając username@do zdalnego adresu URL.

jlh
źródło
git remote set-url origin myusername@...Pomogło mi dodanie nazwy użytkownika do pilota .
Maxim Suslov
0

Sprawdź, czy dostęp do powłoki jest dozwolony na serwerze.

perpetual_dream
źródło
mój był „Cześć g”. okazuje się, że śledziłem witrynę Security Setup i teraz mój login git mówi „Cześć git! Udało Ci się uwierzytelnić, ale nie zapewniam interaktywnego dostępu do powłoki”. Chyba źle to usunąć ....
don jasne
0

Błąd przekształcony w: fatal: protocol error: zła długość linii znak: fata

po dodaniu lokalizacji git-upload-pack do ścieżki systemowej.

Problem wydaje się być apostrofem dodanym wokół nazwy repozytorium: Wyszukiwanie za pomocą narzędzia takiego jak Process Monitor (z wewnętrznych elementów sys), które zostały dodane przez klienta git. Wydaje się, że jest to problem specyficzny dla systemu Windows w systemie Git.

Wypróbowałem tę samą linię poleceń w wierszu polecenia serwera: pełny błąd brzmiał „fatal: not a danego repozytorium (lub żadnego z katalogów nadrzędnych): .git”

Podsumowując, wydaje mi się, że to błąd oprogramowania. Pamiętaj, że nie jestem ekspertem w dziedzinie git, po raz pierwszy używam gita, pochodzę z wywrotu i z konieczności.

Razvan
źródło
0

Na to też wpadliśmy.

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

Nie znam szczegółowych informacji o tym, co poszło nie tak, ale w naszym przypadku to, co spowodowało, było to, że dysk na serwerze był pełny.

anr78
źródło
0

Może to być dostęp do zabezpieczeń na twoim komputerze, czy używasz programu Pageant (który jest agentem szpachli)?

Kevin Davis
źródło
0

zawsze możesz mieć link http do swojego projektu git. Możesz użyć tego zamiast linku ssh. To tylko opcja, którą masz

Mohanakrrishna
źródło
0

Cóż, miałem ten sam problem (Windows 7). Spróbuj uzyskać repozytorium za pomocą hasła. Używam Git Bash + Plink (zmienna środowiskowa GIT_SSH) + Pageant. Pomaga mi usunięcie GIT_SSH (tymczasowe). Nie wiem, dlaczego nie mogę jednocześnie logować się za pomocą hasła i logować się przez RSA ...

Philipp Klemeshov
źródło
0

Późna odpowiedź tutaj, ale mam nadzieję, że to komuś pomoże. Jeśli jest to błąd protokołu, musi zrobić coś z lokalnym gitem, który nie jest w stanie komunikować się ze zdalnym gitem. Może się to zdarzyć, jeśli sklonowałeś repozytorium za pomocą ssh, a jakiś czas później zgubiłeś klucze do repozytorium lub agent ssh nie może już ich znaleźć.

Rozwiązanie

  1. Wygeneruj nowy klucz i dodaj go do swojego repozytorium git lub skonfiguruj swojego agenta ssh, aby ładował klucze, jeśli nadal masz klucze przy sobie, a nie u kogoś innego;)

  2. Innym szybkim rozwiązaniem jest przejście do .gitkatalogu i edycja configplików [remote "origin"] urlod gitdo, httpaby klucze ssh nie były potrzebne do wypychania i powrócą do pytania o nazwę użytkownika i hasło.

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

Zmień na

    [remote "origin"]
    url = http://gitlab.*****.com/****/****.git
    fetch = +refs/heads/*:refs/remotes/origin/*
dziedziczyć
źródło
0

Zmiana pliku wykonywalnego ssh z wbudowanego na nativ w ustawieniach / kontroli wersji / git załatwiła sprawę.

Hakaishin
źródło