Git Remote: Kesalahan: fatal: kesalahan protokol: karakter panjang baris salah: Unab

120

Saya menyiapkan server git dan sekarang ingin mendorong repo saya dari klien. Saya menggunakan git push origin masterdan mendapatkan pesan kesalahan ini:

fatal: protocol error: bad line length character: Unab

Saya tidak tahu apa yang salah. Saya tidak tahu apa itu "Unab". Saya mencoba mengubah ukuran shell tetapi masih "Unab". Saya tidak dapat menemukan solusi untuk pesan kesalahan ini.

Saya menyiapkan server dengan "authorized_keys" dan SSH. (Saya dapat menyambungkannya, menggunakan SSH.)

Sepertinya ini masalah git?

BTW: Server diatur di VM Windows 7

pengguna437899
sumber
Memiliki masalah serupa dengan "fatal: protokol error: karakter panjang baris buruk: Ini", pesan kesalahan saya adalah "Akun ini saat ini tidak tersedia."
hj '21

Jawaban:

117

Pesan kesalahan ini agak tumpul, tetapi sebenarnya yang coba diberitahukan kepada Anda adalah bahwa server jarak jauh tidak membalas dengan respons git yang tepat. Akhirnya, ada masalah di server yang menjalankan git-receive-packproses tersebut.

Dalam protokol Git, empat byte pertama harus menjadi panjang baris. Sebaliknya, mereka adalah karakternya Unab... yang mungkin merupakan awal dari pesan kesalahan. (yaitu, mungkin " Unable to..." melakukan sesuatu).

Apa yang terjadi saat Anda lari ssh <host> git-receive-pack <path-to-git-repository>? Anda akan melihat pesan kesalahan bahwa klien git Anda sedang muntah dan Anda mungkin dapat memperbaikinya.

Edward Thomson
sumber
10
Itu, dan ssh <host> /bin/trueseharusnya tidak menghasilkan apa pun.
Stefan Näwe
9
Saya mengalami masalah yang sama dan penyebabnya adalah 'echo ".bashrc"' di .bashrc saya, jadi bukannya "fatal: protokol kesalahan: karakter panjang baris buruk: Unab" Saya melihat "fatal: kesalahan protokol: panjang baris buruk karakter: .bas ".
snarkyname77
4
Benar, itu juga masalah saya: saya .bashrcdi mesin yang meng-host repositori Git yang saya coba tarik memiliki baris yang menghasilkan gema ke output standar. (Artinya, saya adalah pemilik repositori pada mesin jarak jauh, jadi saya .bashrcyang menyebabkan masalah.) Saya menggunakan trik yang diberikan oleh pengguna ruslo dalam jawaban lain, yaitu mengarahkan output perintah itu dari stdout ke stderr ( some_command 1>&2). Setelah itu, git pulldikerjakan kembali.
Teemu Leisti
2
Dengan perintah di atas, output hanya hang. Ini mencantumkan semua cabang saya, satu per baris, dan kemudian pada baris tercetak terakhir saya mendapatkan output 0000 dan kursor segera setelahnya seolah-olah baris lain harus ditulis tetapi tidak pernah selesai.
demongolem
2
Saya tidak suka membahas masalah yang sudah berusia tujuh tahun, tetapi saya mendapatkan masalah 0000 yang sama dengan git-accept-pack. Itu menggantung di sana sampai saya menekan kembali empat kali, pada saat itu ia melaporkan kesalahan protokol yang sama dan berhenti.
Mark E. Hamilton
60

Saya mengalami masalah serupa, tetapi pesan kesalahan tepatnya adalah:

fatal: kesalahan protokol: karakter panjang baris salah: Usin

Ini di Windows, dengan GIT_SSHset ke jalur plink.exePuTTY.

Kemungkinan masalah dan solusinya:

  • Pastikan jalur ke plink.exebenar. Jalur gaya Unix juga berfungsi dengan baik, misalnya/c/work/tools/PuTTY/plink.exe
  • Pastikan agen kunci PuTTY ( pageant.exe) sedang berjalan
  • Pastikan agen kunci berisi kunci yang valid untuk mengakses server
janos
sumber
7
Saya memiliki masalah yang sama di Windows dan ternyata menjadi penyebab utama yang sama karena alasan yang berlawanan. Saya mencoba menggunakan Cygwin (dan Git SSH yang disematkan) tetapi GIT_SSH disetel ke C: \ ... \ plink.exe yang menyebabkan konflik. Setelah saya menghapus ini semuanya bekerja dengan baik.
Matt Holtzman
11
Menghapus entri GIT_SSH dari variabel lingkungan melakukan trik untuk saya
chamalabey
Kesalahan serupa setelah memutakhirkan GitExt harus memulai ulang kontes dan mengimpor kembali file kunci .ppk.
Bill Dolan
9
Saya hanya lupa memuat kunci pribadi di kontes yang berakhiran fatal: protocol error: bad line length character: git@. Sungguh pesan kesalahan yang menyesatkan.
Ludwig
1
Dalam kasus saya, kontes (Windows 10) tidak berjalan. Setelah saya memulainya dan menambahkan kunci pribadi ke dalamnya, ini Baru Saja Bekerja.
April
28

Untuk pengguna GitExtension:

Saya menghadapi masalah yang sama setelah memutakhirkan git ke 2.19.0

Larutan:

Alat> Setelan> Ekstensi Git> SSH

Pilih [ OpenSSH ] daripada [ Putty ]

masukkan deskripsi gambar di sini

Amit Shah
sumber
Ini persis seperti yang telah saya lakukan, ketika Anda mendapatkan kesalahan fatal: protocol error: bad line length character: git@. Pastikan kunci SSH dibuat dan ditambahkan ke GitLab . Mungkin ekstensi Git perlu dimulai ulang.
pengujian
20

Saya mengalami masalah yang sama setelah menginstal GIT di Windows. Pada awalnya itu berhasil; kemudian, sehari kemudian (setelah PC reboot), tidak lagi, dan saya mendapatkan ini:

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

Masalahnya adalah setelah reboot, "pageant.exe" Putty yang dijalankan secara otomatis tidak lagi memiliki kunci pribadi yang aktif. Saat Anda menambahkan kunci dalam kontes, itu bukan pengaturan yang tetap secara default. Saya hanya perlu menambahkan kunci lagi, dan berhasil dengan baik. Jadi, untuk kasus itu, perlu membuat pagenant memuat kunci secara otomatis, seperti yang dibahas di sini:

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

MaeseDude
sumber
Bagi saya situasinya adalah bahwa di Visual studio saya mendapat kesalahan: "Git gagal dengan kesalahan fatal. Kesalahan protokol: karakter panjang baris buruk: gitu" setiap kali Windows di-restart. Proses kontes tidak dimulai sama sekali. Saya perlu menggunakan misalnya TortoiseGit yang memecahkan masalah ini di latar belakang dan kemudian GIT bekerja di studio Visual seperti pesona.
Honza P.
18

Mungkin Anda memiliki pernyataan di server .bashrc yang menghasilkan keluaran. Saya, misalnya punya ini:

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

Dalam hal ini, keluaran dari penggunaan rvm akan (salah) diartikan sebagai berasal dari git. Jadi gantilah dengan:

rvm use ruby-1.9.3-p194@rails32 > /dev/null
Christer Fernstrom
sumber
Dalam kasus saya (windows 10), masalahnya adalah output dari beberapa perintah terkait buruh pelabuhan pada skrip init.cmd startup cmd saya (yang saya buat dengan instruksi tersebut: stackoverflow.com/questions/17404165/…). tapi prinsipnya sama. Terima kasih!
ET-CS
Ini adalah kasus saya. Saya memiliki perintah 'banner' di .bashrc saya. Mengomentarinya memperbaiki masalah. Terima kasih :).
jamie
12

Setelah memuat kunci pribadi SSH di Ekstensi Git, masalah ini teratasi.

Stanley Emmanuel
sumber
1
bagi saya - menambahkan kunci pribadi ssh ke kontes
Nick Grealy
10

Anda dapat mengarahkan keluaran apa pun dari .bashrcke stderr:

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

git akan mengabaikan simbol ini


sumber
Itu berhasil untuk saya. Saya punya pernyataan rvm use 2.0.0-p353di saya .bashrc, yang pasti membingungkan git pull. Setelah menambahkan 1>&2dan mencoba lagi, git pullbekerja dengan baik.
Teemu Leisti
7

Saya mengalami masalah serupa di Windows menggunakan Git Bash. Saya terus mendapatkan kesalahan ini saat mencoba melakukan klon git. Repositori berada di kotak Linux dengan GitLab diinstal.

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

Saya memastikan kunci ssh dibuat. Kunci publik ditambahkan di GitLab. Ssh-agent sedang berjalan dan kunci yang dihasilkan telah ditambahkan ( tautan github ).

Saya kehabisan opsi dan akhirnya mencoba menutup Git Bash dan membukanya lagi dengan mengklik kanan 'Run as Administrator'. Bekerja setelah itu.

syclee
sumber
Saya melihat hal yang sama (Windows 10 64-bit) tetapi menjalankan sebagai administrator tidak memperbaikinya.
Ed Avis
4
Saya punya firasat tentang apa yang menyebabkan ini. Jika Anda tidak memiliki ssh keypair yang diatur (atau tidak dapat dibaca karena beberapa alasan) maka ssh meminta kata sandi. Pada Windows tidak ada perbedaan yang jelas antara keluaran standar dan keluaran konsol, jadi prompt kata sandi masuk ke stdout: "git @ anything's password:". Ini dilihat oleh git sebagai keluaran protokol yang rusak.
Ed Avis
@EdAvis Terima kasih! Saya memiliki masalah yang sama dan setelah membaca komentar Anda, saya memeriksa dua kali agen kunci saya (yang biasanya dijalankan saat startup di mesin saya). Ternyata itu tidak berjalan karena suatu alasan ...
Griddo
5

Ini mungkin membantu seseorang. Ketika saya mencoba mengkloning proyek dari instans EC2, saya mendapatkan kesalahan di bawah ini:

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

Resolusi untuk saya mencakup langkah-langkah di bawah ini:

  1. Pastikan kunci SSH (publik) ditambahkan / diperbarui dalam instance EC2.
  2. Pastikan agen otentikasi (dalam kasus saya, Pageant = Putty Authentication Agent) sedang berjalan dan kunci pribadi yang sesuai dimuat.
  3. Gunakan ID kunci SSH EC2 sebagai kunci publik untuk git clone. Contoh:

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

acveer
sumber
4
Catatan: Ini karena Anda menggunakan plink, dan jika Anda melakukannya plink <server_name> ls, hal pertama yang dicetak plink ke stdout adalah login as, yang tampaknya coba ditafsirkan oleh git sebagai sesuatu yang penting. Perbaikan cepat adalah dengan sederhana unset GIT_SSHdan unset SVN_SSH. Info lebih lanjut di sini
Pod
@Pod Anda benar, di windows perintah ini akan membantu: set GIT_SSH=danset SVN_SSH=
Maksim Kostromin
Saya memiliki masalah yang sama dengan TFS. Setelah menambahkan id kunci semuanya berfungsi dengan baik, terima kasih!
Andre Hofmeister
4

Bagi saya itu karena saya baru saja menambahkan

RequestTTY force

ke .ssh / config

mengomentari ini memungkinkannya bekerja

Kam, 01 Jan 1970 000000 GMT
sumber
3

Periksa file startup Anda pada akun yang digunakan untuk menghubungkan ke mesin jarak jauh untuk pernyataan "echo". Untuk shell Bash, ini akan menjadi .bashrc dan .bash_profile Anda, dll. Edward Thomson benar dalam jawabannya tetapi masalah khusus yang saya alami adalah ketika ada cetakan boiler-plate saat login ke server melalui ssh. Git akan mendapatkan empat byte pertama dari pelat-boiler itu dan memunculkan kesalahan ini. Sekarang dalam kasus khusus ini saya akan menebak bahwa "Unab" sebenarnya adalah karya "Unable ..." yang mungkin menunjukkan bahwa ada sesuatu yang salah pada host Git.

snarkyname77
sumber
3

Dalam kasus saya setelah mengambilnya ditulis: fatal: protocol error: bad line length character: Pass. Juga setelah mendorong saya punya: fatal: protocol error: bad line length character: git@ Done.

Setelah reboot Windows saya harus memulai "PuTTY agent" (pageant.exe) lagi dan menambahkan kunci pribadi yang menghilang dari daftar kunci.

CoolMind
sumber
2

FYI Saya mendapat pesan kesalahan yang sama ini setelah saya mengupgrade kontainer CentOS6 ke CentOS7 - beberapa operasi git mulai gagal saat membangun kontainer, mis.

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

Menjalankan ssh memberi saya kesalahan yang bisa saya cari:

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

Itu membawa saya ke https://github.com/wolfcw/libfaketime/issues/63 di mana saya menyadari bahwa saya telah lupa saya memiliki LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1Dockerfile orang tua. Mengomentari itu memperbaiki kesalahan.

jamshid
sumber
2

Dalam kasus saya, masalahnya adalah 32-bit Putty dan pageant.exe - ia tidak dapat berkomunikasi dengan TortoisePlink.exe 64-bit. Mengganti Putty 32-bit dengan versi 64-bit menyelesaikan masalah.

Nikolai Koudelia
sumber
2

Saya mengalami kesalahan yang sama "fatal: protocol error: bad line length character: shmi" Dimana shmiadalah nama pengguna dalam kasus saya. Saya mengganti SSH dari PuTTY ke OpenSSH "Git Extensions->Settings->SSH". Itu membantu.

Val
sumber
1

Saya memiliki masalah yang sama dengan Christer Fernstrom. Dalam kasus saya, itu adalah pesan yang saya masukkan ke .bashrc saya yang mengingatkan saya untuk melakukan pencadangan ketika saya belum melakukannya dalam beberapa hari.

Christopher Vickery
sumber
1

Hal berikut dapat membantu seseorang: Saat mencoba menggandakan proyek yang saya miliki di instans AWS EC2 saya, saya mendapatkan kesalahan berikut:

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

Ini disebabkan karena mencoba ssh sebagai root, bukan EC2-USER. jika Anda benar-benar ssh tanpa melakukan klon git ... Anda akan melihat pesan kesalahan dalam sesuatu di sepanjang baris "Harap masuk dengan ec2-user" Setelah saya melakukan klon git sebagai pengguna ec2, itu bagus.

ConfusedDeer
sumber
1

Saya juga mengalami kesalahan itu sesekali, tetapi jika terjadi, itu berarti cabang saya tidak mutakhir jadi saya harus melakukannya git pull origin <current_branch>

bonbon.langes
sumber
1

Git tidak meminta kata sandi dan gagal dengan pesan samar serupa "fatal: protokol error: karakter panjang baris buruk: pengguna" jika Anda tidak memiliki pengaturan otentikasi kunci pribadi Anda juga.

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server memberi tahu cara menentukan kunci publik di server. Pada dasarnya tambahkan kunci publik ke ~ / .ssh / authorized_keys atau ~ / .ssh / authorized_keys2

Saya harus sedikit kesulitan tentang cara memberikan kunci pribadi ke Git Bash di mesin windows. Jawaban Dan McClain di /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801 menjelaskan hal itu. Satu tambahan untuk jawabannya, dalam kasus saya file kunci pribadi diharapkan diberi nama id_rsa.pub

Sandip
sumber
1

Bagi saya menambahkan detail host yang sama ke dalam Putty dengan kunci pribadi (ubah dengan puttygen) berfungsi. Perintah git bash apa pun setelah itu tidak memiliki masalah.

David Aleu
sumber
1

Jika Anda menggunakan Putty. Kemudian pastikan untuk menjalankan Pageant dan kunci pribadi Anda dimuat di Pageant (klik kanan mouse pada ikon Pageant di Taskbar dan klik "View keys" pada menu yang muncul).

Sebaliknya saat Anda melakukannya di cmd.exe:

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

Anda mendapatkan pesan ini "fatal: protokol error: karakter panjang baris salah:"

Pengembang Marius Žilėnas
sumber
1

TL; DR: Do tidak menghilangkan username@di URL remote ketika pada Windows.

Di Linux dan Windows dengan ssh default, Anda dapat menghilangkan nama pengguna dari URL jarak jauh, seperti:

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

Karena perilaku default ssh adalah hanya menggunakan nama pengguna apa pun yang saat ini Anda gunakan untuk masuk. Jika Anda menggunakan Windows dan telah mengatur git untuk digunakan plink.exesehingga Anda dapat menggunakan kunci yang dimuat di Anda pageant, maka ini tidak akan berfungsi, karena plinktidak memiliki perilaku nama pengguna otomatis yang sama, yang mengakibatkan pesan kesalahan samar tersebut, karena akan prompt untuk nama pengguna:

$ plink server-name
login as: _

Melawan:

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

Jika Anda sudah mengkloning repositori, entah bagaimana Anda dapat memperbaiki remote di Anda .git/configdengan menambahkan username@ke URL jarak jauh.

jlh
sumber
Menambahkan nama pengguna ke remote dengan git remote set-url origin myusername@...membantu saya.
Maxim Suslov
0

Periksa apakah akses Shell diizinkan di server.

perpetual_dream
sumber
milikku adalah "Hai g". ternyata saya mengikuti beberapa situs web Pengaturan Keamanan dan sekarang login git saya mengatakan "Hai git! Anda telah berhasil mengautentikasi, tetapi saya tidak menyediakan akses shell interaktif.". rasa saya harus menghapus itu ....
jangan terang
0

Kesalahan diubah menjadi: fatal: protokol kesalahan: karakter panjang baris buruk: fata

setelah menambahkan lokasi git-upload-pack ke jalur sistem.

Masalahnya tampaknya berupa tanda kutip yang ditambahkan di sekitar nama repositori: Mencari dengan alat seperti Monitor Proses (dari internal sys), yang ditambahkan oleh klien git. Tampaknya menjadi masalah jendela khusus git.

Saya mencoba baris perintah yang sama pada prompt server: kesalahan penuh adalah "fatal: bukan repositori yang diberikan (atau salah satu direktori induk): .git"

Kesimpulannya, bagi saya ini seperti bug perangkat lunak. Harap diperhatikan bahwa saya bukan ahli git, ini pertama kali saya menggunakan git, saya berasal dari subversi dan perforce.

Razvan
sumber
0

Kami juga mengalami ini.

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

Saya tidak tahu detail detail tentang apa yang salah, tetapi dalam kasus kami yang memicunya adalah bahwa disk di server penuh.

anr78
sumber
0

Ini bisa menjadi akses keamanan pada mesin Anda, apakah Anda menjalankan Pageant (yang merupakan agen dempul)?

Kevin Davis
sumber
0

Anda selalu dapat memiliki tautan http ke proyek git Anda. Anda dapat menggunakannya sebagai pengganti ssh link. Ini hanyalah opsi yang Anda miliki

Mohanakrrishna
sumber
0

Nah, saya mengalami masalah yang sama (Windows 7). Cobalah untuk mendapatkan repo dengan kata sandi. Saya menggunakan Git Bash + Plink (variabel lingkungan GIT_SSH) + Pageant. Menghapus GIT_SSH (sementara) membantu saya. Saya tidak tahu mengapa saya tidak dapat menggunakan login by pass dan login dengan RSA pada saat yang sama ...

Philipp Klemeshov
sumber
0

Jawaban terlambat di sini, tapi berharap ini akan membantu seseorang. Jika ini adalah kesalahan protokol, ia harus melakukan sesuatu dengan git lokal Anda yang tidak dapat berkomunikasi dengan git jarak jauh. Ini bisa terjadi jika Anda mengkloning repo melalui ssh dan beberapa saat kemudian, Anda kehilangan kunci repo atau agen ssh Anda tidak dapat menemukan kunci tersebut lagi.

Larutan

  1. Buat kunci baru dan tambahkan repo git Anda atau konfigurasikan agen ssh Anda untuk memuat kunci jika Anda masih memiliki kunci dengan Anda & tidak dengan orang lain;)

  2. Perbaikan cepat lainnya adalah pergi ke .gitdirektori Anda dan edit configfile [remote "origin"] urldari gitmenjadi httpsehingga kunci ssh tidak diperlukan untuk mendorong dan itu akan kembali untuk menanyakan nama pengguna dan kata sandi Anda.

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

Mengubah

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

Mengubah exectuable ssh dari builtin ke nativ di bawah pengaturan / kontrol versi / git melakukan trik untuk saya.

Hakaishin
sumber