Git Remote: Error: fatal: error de protocolo: carácter de longitud de línea incorrecta: Unab


120

Configuré un servidor git y ahora quiero enviar inicialmente mi repositorio desde el cliente. Usé git push origin mastery recibí este mensaje de error:

fatal: protocol error: bad line length character: Unab

No se lo que está mal. No sé qué es "Unab". Intenté cambiar el tamaño del shell pero sigue siendo "Unab". No puedo encontrar una solución para este mensaje de error.

Configuré el servidor con "claves_autorizadas" y SSH. (Puedo conectarme a él mediante SSH).

¿Parece ser un problema de git?

Por cierto: el servidor está configurado en una máquina virtual de Windows 7


Tuve un problema similar con "fatal: error de protocolo: carácter de longitud de línea incorrecta: esto", mi mensaje de error era "Esta cuenta no está disponible actualmente".
hj '21 de

Respuestas:


117

Este mensaje de error es un poco obtuso, pero lo que en realidad está tratando de decirte es que el servidor remoto no respondió con una respuesta de git adecuada. Al final, hubo un problema en el servidor que ejecuta el git-receive-packproceso.

En el protocolo Git, los primeros cuatro bytes deben ser la longitud de la línea. En cambio, eran los personajes Unab... lo que probablemente sea el comienzo de un mensaje de error de algún tipo. (es decir, probablemente sea " Unable to..." hacer algo).

¿Qué pasa cuando corres ssh <host> git-receive-pack <path-to-git-repository>? Debería ver el mensaje de error de que su cliente git está vomitando y es posible que pueda corregirlo.


10
Eso, y ssh <host> /bin/trueno debería generar nada.
Stefan Näwe

9
Tuve este mismo problema y la causa fue un 'echo ".bashrc"' en mi .bashrc, así que en lugar de "fatal: error de protocolo: carácter de longitud de línea incorrecta: Unab" Estaba viendo "fatal: error de protocolo: longitud de línea incorrecta carácter: .bas ".
snarkyname77

4
Bien, ese también era mi problema: mi .bashrcen la máquina que alojaba el repositorio de Git del que estaba tratando de extraer tenía una línea que producía un eco en la salida estándar. (Es decir, yo era el propietario del repositorio en la máquina remota, por lo que fue mi .bashrcquien causó el problema). Usé el truco dado por el usuario ruslo en otra respuesta, es decir, redirigir la salida de ese comando de stdout a stderr ( some_command 1>&2). Después de eso, git pulltrabajó de nuevo.
Teemu Leisti

2
Con el comando anterior, la salida simplemente se cuelga. Enumera todas mis ramas, una por línea, y luego en la línea impresa final obtengo el resultado 0000 y el cursor inmediatamente después como si se escribiera otra línea pero nunca se completara.
demongolem

2
Odio encontrar un problema de siete años, pero tengo el mismo problema 0000 con git-receive-pack. Se cuelga allí hasta que presiono retorno cuatro veces, momento en el que informa el mismo error de protocolo y se cierra.
Mark E. Hamilton

60

Tuve un problema similar, pero el mensaje de error exacto fue:

fatal: error de protocolo: carácter de longitud de línea incorrecta: Usin

Esto está en Windows, con GIT_SSHla ruta plink.exede PuTTY.

Posibles problemas y soluciones:

  • Asegúrese de que la ruta a plink.exesea ​​correcta. La ruta de estilo Unix también funciona bien, por ejemplo/c/work/tools/PuTTY/plink.exe
  • Asegúrese de que el agente clave de PuTTY ( pageant.exe) se esté ejecutando
  • Asegúrese de que el agente de claves contenga una clave válida para acceder al servidor

7
Tuve el mismo problema en Windows y resultó ser la misma causa raíz por la razón opuesta. Estaba intentando usar Cygwin (y el Git SSH integrado) pero GIT_SSH estaba configurado en C: \ ... \ plink.exe, lo que provocó un conflicto. Una vez que eliminé esto, todo funcionó bien.
Matt Holtzman

11
Eliminar la entrada GIT_SSH de las variables de entorno me
funcionó

Un error similar después de actualizar GitExt tuvo que reiniciar el concurso y volver a importar el archivo de clave .ppk.
Bill Dolan

9
Simplemente olvidé cargar la clave privada en el concurso en el que terminó fatal: protocol error: bad line length character: git@. Qué mensaje de error tan engañoso.
Ludwig

1
En mi caso (Windows 10), el concurso no se estaba ejecutando. Una vez que lo inicié y le agregué la clave privada, esto acaba de funcionar.
26 de abril

29

Para usuarios de GitExtension:

Enfrenté el mismo problema después de actualizar git a 2.19.0

Solución:

Herramientas> Configuración> Extensiones de Git> SSH

Seleccione [ OpenSSH ] en lugar de [ PuTTY ]

ingrese la descripción de la imagen aquí


Esto es exactamente lo que hice cuando recibiste el error fatal: protocol error: bad line length character: git@. Asegúrese de que la clave SSH se genere y agregue a GitLab . Quizás fue necesario reiniciar Git Extensions .
prueba

20

Tuve el mismo tipo de problema después de instalar GIT en Windows. Al principio funcionó; luego, un día después (después de reiniciar la PC), ya no lo hizo, y obtuve esto:

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

El problema era que después del reinicio, el Putty "pageant.exe" iniciado automáticamente ya no tenía la clave privada activa. Cuando agrega una clave en el concurso, no es una configuración persistente por defecto. Solo tuve que agregar la clave nuevamente, y funcionó bien. Entonces, para ese caso, es necesario hacer que pagenant cargue la clave automáticamente, como se explica aquí:

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


Para mí, la situación era que en Visual Studio recibía un error: "Git falló con un error fatal. Error de protocolo: carácter de longitud de línea incorrecta: gitu" cada vez que se reiniciaba Windows. El proceso del concurso no se inició en absoluto. Necesitaba usar, por ejemplo, TortoiseGit que resolvió esto en segundo plano y luego GIT trabajó en Visual Studio como un encanto.
Honza P.

18

Tal vez tenga una declaración en el .bashrc del servidor que produce una salida. Yo, por ejemplo, tuve esto:

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

En este caso, la salida del uso de rvm se interpretará (incorrectamente) como proveniente de git. Así que reemplázalo por:

rvm use ruby-1.9.3-p194@rails32 > /dev/null

En mi caso (Windows 10), el problema fue la salida de algunos comandos relacionados con la ventana acoplable en mi script de inicio de cmd init.cmd (que creé con esas instrucciones: stackoverflow.com/questions/17404165/…). pero es el mismo principio. ¡gracias!
ET-CS

Este fue mi caso. Tenía un comando de 'banner' en mi .bashrc. Comentarlo solucionó el problema. Gracias :).
Jamie

12

Después de cargar la clave privada SSH en Git Extensions, este problema se resuelve.


1
para mí - agregando la clave privada ssh al concurso
Nick Grealy

10

Puede redirigir cualquier salida de .bashrca stderr:

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

git ignorará estos símbolos


Eso lo hizo por mí. Tenía una declaración rvm use 2.0.0-p353en mi .bashrc, que debe haber confundido git pull. Después de agregar 1>&2e intentar nuevamente, git pullfuncionó bien.
Teemu Leisti

7

Tuve un problema similar en Windows usando Git Bash. Seguí recibiendo este error al intentar hacer un clon de git. El repositorio estaba en una caja de Linux con GitLab instalado.

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

Me aseguré de que se generara la clave ssh. La clave pública se agregó en GitLab. El agente ssh se estaba ejecutando y se agregó la clave generada ( enlace de github ).

Me quedé sin opciones y finalmente intenté cerrar Git Bash y abrirlo nuevamente haciendo clic derecho en 'Ejecutar como administrador'. Trabajó después de eso.


Veo lo mismo (Windows 10 de 64 bits) pero ejecutarlo como administrador no lo soluciona.
Ed Avis

4
Tengo una corazonada sobre la causa de esto. Si no tiene configurado el par de claves ssh (o no se puede leer por alguna razón), ssh solicita una contraseña. En Windows no hay una distinción clara entre la salida estándar y la salida de la consola, por lo que la solicitud de contraseña va a stdout: "git @ cualquier contraseña:". Esto es visto por git como una salida de protocolo corrupta.
Ed Avis

@EdAvis ¡Gracias! Tuve el mismo problema y después de leer su comentario verifiqué mi agente clave (que generalmente se ejecuta al inicio de mi máquina). Resultó que no se estaba ejecutando por alguna razón ...
Griddo

5

Esto podría ayudar a alguien. Cuando intentaba clonar un proyecto desde una instancia EC2, recibía el siguiente error:

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

La resolución para mí incluye los siguientes pasos:

  1. Asegúrese de que la clave SSH (pública) se agregue / actualice en la instancia EC2.
  2. Asegúrese de que el agente de autenticación (en mi caso su Pageant = Putty Authentication Agent) se esté ejecutando y la clave privada correspondiente esté cargada.
  3. Use el ID de la clave SSH de EC2 para la clave pública para git clone. Ejemplo:

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


4
Nota: Esto se debe a que está usando plink, y si lo hace plink <server_name> ls, lo primero que plink imprime en stdout es login asqué git parece estar tratando de interpretar como algo importante. Una solución rápida es simplemente unset GIT_SSHy unset SVN_SSH. Más información aquí
Pod

@Pod tiene razón, en Windows estos comandos deberían ayudar: set GIT_SSH=yset SVN_SSH=
Maksim Kostromin

Tuve el mismo problema con TFS. Después de agregar la identificación de la clave, todo funciona bien, ¡gracias!
Andre Hofmeister


3

Verifique sus archivos de inicio en la cuenta utilizada para conectarse a la máquina remota para ver si hay declaraciones de "eco". Para el shell Bash, estos serían su .bashrc y .bash_profile, etc. Edward Thomson tiene razón en su respuesta, pero un problema específico que he experimentado es cuando hay una impresión de la placa de la caldera al iniciar sesión en un servidor a través de ssh. Git obtendrá los primeros cuatro bytes de esa placa de caldera y generará este error. Ahora, en este caso específico, voy a adivinar que "Unab" es en realidad el trabajo "No se puede ...", lo que probablemente indica que hay algo más mal en el host Git.


3

En mi caso después de buscar a que fue escrito: fatal: protocol error: bad line length character: Pass. También después de empuje que tengo: fatal: protocol error: bad line length character: git@ Done.

Después de reiniciar Windows, tuve que iniciar "PuTTY agent" (pageant.exe) nuevamente y agregar una clave privada que desapareció de una lista de claves.


2

Para su información, recibí este mismo mensaje de error después de actualizar un contenedor CentOS6 a CentOS7: algunas operaciones de git comenzaron a fallar al construir el contenedor, por ejemplo

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

Ejecutar ssh me dio un error en el que podía buscar:

# ssh git@bitbucket.org
Invalid clock_id for clock_gettime: 7

Eso me llevó a https://github.com/wolfcw/libfaketime/issues/63 donde me di cuenta de que había olvidado que tenía un LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1archivo Dockerfile principal. Comentar eso solucionó el error.


2

En mi caso, el problema fue Putty de 32 bits y pageant.exe; no se puede comunicar con TortoisePlink.exe de 64 bits. Reemplazar Putty de 32 bits por una versión de 64 bits resolvió el problema.


2

Tuve el mismo error "fatal: protocol error: bad line length character: shmi" donde shmies el nombre de usuario en mi caso. Cambié SSH de PuTTY a OpenSSH en "Git Extensions->Settings->SSH". Eso ayudo.


1

Tuve el mismo problema que Christer Fernstrom. En mi caso, fue un mensaje que había puesto en mi .bashrc que me recuerda hacer una copia de seguridad cuando no he hecho una en un par de días.


1

Lo siguiente puede ayudar a alguien: Al intentar clonar un proyecto que tengo en mi instancia de AWS EC2, recibí el siguiente error:

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

Esto fue causado por intentar ssh como root en lugar de EC2-USER. si realmente ssh sin hacer un clon de git ... verá el mensaje de error en algo como "Por favor, inicie sesión con ec2-user". Una vez que hice un clon de git como usuario de ec2, fue bueno.


1

También encuentro ese error de vez en cuando, pero cuando lo hace, significa que mi sucursal no está actualizada, así que tengo que hacerlo git pull origin <current_branch>


1

Git no solicita la contraseña y falla con un mensaje críptico similar "fatal: error de protocolo: carácter de longitud de línea incorrecta: usuario" si no tiene su configuración de autenticación de clave privada también.

https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server indica cómo especificar la clave pública en el servidor. Básicamente, agregue la clave pública a ~ / .ssh / allowed_keys o ~ / .ssh / allowed_keys2

Tuve que luchar un poco sobre cómo proporcionar una clave privada al Git Bash en la máquina con Windows. La respuesta de Dan McClain en /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801 describe eso. Una adición a su respuesta, en mi caso, se esperaba que el archivo de clave privada se llamara id_rsa.pub


1

Para mí, agregar los mismos detalles del host en Putty con la clave privada (convertir con puttygen) funcionó. Cualquier comando de git bash después de eso no tuvo problemas.


1

Si usa Putty. Luego, asegúrese de que Pageant se esté ejecutando y su clave privada esté cargada en Pageant (haga clic con el botón derecho del mouse en el icono de Pageant en la barra de tareas y haga clic en "Ver claves" en el menú emergente).

De lo contrario, cuando lo haga en cmd.exe:

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

aparece este mensaje "fatal: error de protocolo: carácter de longitud de línea incorrecta:"


1

TL; DR: No omita en sus URL remotas cuando estéusername@ en Windows.

En Linux y en Windows con el ssh predeterminado, puede omitir el nombre de usuario de las URL remotas, así:

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

Porque el comportamiento predeterminado de ssh es usar cualquier nombre de usuario con el que haya iniciado sesión actualmente. Si está en Windows y ha configurado git para usar de plink.exemodo que pueda usar la clave cargada en su pageant, entonces esto no funcionará, porque plinkno tiene este mismo comportamiento de nombre de usuario automático, lo que resulta en esos mensajes de error crípticos, porque lo hará solicitar el nombre de usuario:

$ plink server-name
login as: _

Versus:

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

Si ya clonó un repositorio de alguna manera, puede arreglar los controles remotos en su .git/configagregando el username@a la URL remota.


Agregar el nombre de usuario al control remoto git remote set-url origin myusername@...me ayudó.
Maxim Suslov

0

Compruebe si el acceso a Shell está permitido en el servidor.


el mío era "Hola g". resulta que seguí algún sitio web de configuración de seguridad y ahora mi inicio de sesión de git dice "¡Hola, git! Te has autenticado correctamente, pero no proporciono acceso interactivo al shell". supongo que los malos tienen que quitar ....
don brillante

0

El error se transformó en: fatal: error de protocolo: carácter de longitud de línea incorrecta: fata

después de agregar la ubicación de git-upload-pack a la ruta del sistema.

El problema parece ser un apóstrofe agregado alrededor del nombre del repositorio: buscando con una herramienta como Process Monitor (de sys internos), que fueron agregadas por el cliente git. Parece ser un problema de Windows específico de git.

Probé la misma línea de comando en el indicador del servidor: el error completo fue "fatal: no es un repositorio dado (o cualquiera de los directorios principales): .git"

En conclusión, a mí me parece un error de software. Tenga en cuenta que no soy un experto en git, es la primera vez que uso git, vengo de subversión y forzosamente.


0

También nos encontramos con esto.

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

No conozco los detalles sobre lo que salió mal, pero en nuestro caso lo que provocó fue que el disco en el servidor estaba lleno.


0

Podría ser un acceso de seguridad en su máquina, ¿está ejecutando Pageant (que es un agente de masilla)?


0

siempre puede tener un enlace http a su proyecto git. Puede usar eso en lugar del enlace ssh. Esta es solo una opción que tienes


0

Bueno, tuve el mismo problema (Windows 7). Intente obtener un repositorio con contraseña. Yo uso Git Bash + Plink (variable de entorno GIT_SSH) + Pageant. Eliminar GIT_SSH (temporal) me ayuda. No sé por qué no puedo usar el inicio de sesión por contraseña y el inicio de sesión con RSA al mismo tiempo ...


0

Respuesta tardía aquí, pero espero que ayude a alguien. Si es un error de protocolo, tiene que hacer algo con su git local que no puede comunicarse con el git remoto. Esto puede suceder si clonó el repositorio a través de ssh y, en algún momento, perdió las claves del repositorio o si su agente ssh ya no puede encontrar esas claves.

Solución

  1. Genere una nueva clave y agréguela a su repositorio de git o configure su agente ssh para cargar las claves si todavía tiene las claves con usted y no con otra persona;)

  2. Otra solución rápida es ir a su .gitdirectorio y editar el configarchivo [remote "origin"] urlde gita httppara que las claves ssh no sean necesarias para presionar y volverá a solicitar su nombre de usuario y contraseña.

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

Cambiar a

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

0

Cambiar el exectuable ssh de incorporado a nativ en settings / version control / git funcionó para mí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.