Eu configurei um servidor git e quero agora enviar inicialmente meu repo do cliente. Usei git push origin master
e recebo esta mensagem de erro:
fatal: protocol error: bad line length character: Unab
Eu não sei o que está errado. Não sei o que é "Unab". Tentei redimensionar o shell, mas ainda está "Unab". Não consigo encontrar uma solução para esta mensagem de erro.
Eu configurei o servidor com "authorized_keys" e SSH. (Posso me conectar a ele, usando SSH.)
Parece ser um problema git?
BTW: o servidor está configurado em uma VM do Windows 7
git
ssh
authorized-keys
user437899
fonte
fonte
Respostas:
Essa mensagem de erro é um pouco obtusa, mas o que ela está tentando dizer é que o servidor remoto não respondeu com uma resposta git adequada. Por fim, houve um problema no servidor que estava executando o
git-receive-pack
processo.No protocolo Git, os primeiros quatro bytes devem ser o comprimento da linha. Em vez disso, eles eram os personagens
Unab
... o que provavelmente é o começo de uma mensagem de erro de algum tipo. (ou seja, é provavelmente "Unable to...
" fazer algo).O que acontece quando você corre
ssh <host> git-receive-pack <path-to-git-repository>
? Você deve ver a mensagem de erro de que seu cliente git está vomitando e pode ser capaz de corrigi-lo.fonte
ssh <host> /bin/true
não deve produzir nada..bashrc
na máquina que hospedava o repositório Git de onde eu estava tentando extrair, havia uma linha que produzia um eco na saída padrão. (Ou seja, eu era o dono do repositório na máquina remota, então foi o meu.bashrc
que causou o problema.) Usei o truque dado pelo usuário ruslo em outra resposta, ou seja, redirecionar a saída desse comando de stdout para stderr (some_command 1>&2
) Depois disso,git pull
funcionou novamente.0000
e o cursor imediatamente depois, como se outra linha fosse escrita, mas nunca completa.Tive um problema semelhante, mas a mensagem de erro exata foi:
Isso está no Windows, com
GIT_SSH
o caminho definido paraplink.exe
do PuTTY.Possíveis problemas e soluções:
plink.exe
está correto. O caminho de estilo Unix também funciona bem, por exemplo/c/work/tools/PuTTY/plink.exe
pageant.exe
) esteja em execuçãofonte
fatal: protocol error: bad line length character: git@
. Que mensagem de erro enganosa.Eu enfrentei o mesmo problema depois de atualizar o git para 2.19.0
Ferramentas> Configurações> Extensões Git> SSH
Selecione [ OpenSSH ] em vez de [ PuTTY ]
fonte
fatal: protocol error: bad line length character: git@
. Certifique-se de que a chave SSH seja gerada e adicionada ao GitLab . Talvez o reinício das extensões Git fosse necessário.Tive o mesmo tipo de problema após instalar o GIT no Windows. No início funcionou; então, um dia depois (após uma reinicialização do PC), não parou mais, e eu peguei o seguinte:
O problema era que, após a reinicialização, o Putty "pageant.exe" iniciado automaticamente não tinha mais a chave privada ativa. Quando você adiciona uma chave no pageant, não é uma configuração persistente por padrão. Eu só tive que adicionar a chave novamente e funcionou bem. Portanto, para esse caso, é necessário fazer com que o pagenant carregue a chave automaticamente, conforme discutido aqui:
https://www.digitalocean.com/community/tutorials/how-to-use-pageant-to-streamline-ssh-key-authentication-with-putty
fonte
Talvez você tenha uma instrução no .bashrc do servidor que produza saída. Eu, por exemplo, tinha este:
Neste caso, a saída do uso do rvm será (erroneamente) interpretada como vinda do git. Portanto, substitua-o por:
fonte
Depois de carregar a chave privada SSH nas extensões Git, esse problema é resolvido.
fonte
Você pode redirecionar qualquer saída de
.bashrc
parastderr
:git irá ignorar estes símbolos
fonte
rvm use 2.0.0-p353
em meu.bashrc
, que deve ter confundidogit pull
. Depois de anexar1>&2
e tentar novamente,git pull
funcionou bem.Tive um problema semelhante no Windows usando Git Bash. Continuei recebendo este erro ao tentar fazer um clone do git. O repositório estava em uma caixa Linux com GitLab instalado.
Verifiquei se a chave ssh foi gerada. A chave pública foi adicionada ao GitLab. O ssh-agent estava em execução e a chave gerada foi adicionada ( link do github ).
Fiquei sem opções e finalmente tentei fechar o Git Bash e abri-lo novamente clicando com o botão direito em 'Executar como Administrador'. Trabalhou depois disso.
fonte
Isso pode ajudar alguém. Quando eu estava tentando clonar um projeto de uma instância EC2, recebia o erro abaixo:
A resolução para mim inclui as etapas abaixo:
Use o ID da chave SSH EC2 para a chave pública do clone do git. Exemplo:
git clone ssh: // {ID da chave SSH}@someaccount.amazonaws.com/v1/repos/repo1
fonte
plink <server_name> ls
, a primeira coisa que o plink imprime no stdout élogin as
que o git parece estar tentando interpretar como algo importante. Uma solução rápida é simplesmenteunset GIT_SSH
eunset SVN_SSH
. Mais informações aquiset GIT_SSH=
eset SVN_SSH=
Para mim foi porque eu adicionei recentemente
em .ssh / config
comentar isso permitiu que funcionasse
fonte
Verifique seus arquivos de inicialização na conta usada para se conectar à máquina remota em busca de declarações "echo". Para o shell do Bash, seriam seu .bashrc e .bash_profile etc. Edward Thomson está correto em sua resposta, mas um problema específico que eu experimentei é quando há alguma impressão padrão ao fazer login em um servidor via ssh. O Git obterá os primeiros quatro bytes desse boiler-plate e gerará este erro. Agora, neste caso específico, vou supor que "Unab" é na verdade o trabalho "Incapaz de ...", o que provavelmente indica que há algo mais errado no host Git.
fonte
No meu caso, depois buscá-la foi escrito:
fatal: protocol error: bad line length character: Pass
. Além disso, depois de empurrar, obtive:fatal: protocol error: bad line length character: git@ Done
.Após reiniciar o Windows, tive que iniciar o "agente PuTTY" (pageant.exe) novamente e adicionar uma chave privada que desapareceu de uma lista de chaves.
fonte
Para sua informação, recebi a mesma mensagem de erro depois de atualizar um contêiner CentOS6 para CentOS7 - algumas operações git começaram a falhar durante a construção do contêiner, por exemplo
A execução de ssh me deu um erro que poderia pesquisar:
Isso me levou a https://github.com/wolfcw/libfaketime/issues/63, onde percebi que tinha esquecido que tinha um
LD_PRELOAD=/usr/local/lib/faketime/libfaketime.so.1
em um Dockerfile pai. Comentar isso corrigiu o erro.fonte
No meu caso, o problema era o Putty de 32 bits e o pageant.exe - ele não consegue se comunicar com o TortoisePlink.exe de 64 bits. Substituir o Putty de 32 bits por uma versão de 64 bits resolveu o problema.
fonte
Eu tive o mesmo erro
"fatal: protocol error: bad line length character: shmi"
ondeshmi
é o nome de usuário no meu caso. Troquei SSH de PuTTY para OpenSSH em"Git Extensions->Settings->SSH"
. Ajudou.fonte
Eu tive o mesmo problema que Christer Fernstrom. No meu caso, foi uma mensagem que coloquei em meu .bashrc que me lembra de fazer um backup quando não fizer um há alguns dias.
fonte
O seguinte pode ajudar alguém: Ao tentar clonar um projeto que tenho em minha instância do AWS EC2, estava recebendo o seguinte erro:
Isso foi causado pela tentativa de ssh como root em vez de EC2-USER. se você realmente ssh sem fazer um clone do git ... você verá a mensagem de erro em algo parecido com "Por favor, faça o login com o usuário ec2" Uma vez que eu fiz um clone do git como um usuário ec2, foi bom.
fonte
Eu também encontro esse erro de vez em quando, mas quando isso acontece, significa que meu branch não está atualizado, então eu tenho que fazer
git pull origin <current_branch>
fonte
O Git não solicita a senha e falha com uma mensagem criptografada semelhante "fatal: erro de protocolo: caractere de comprimento de linha inválido: usuário" se você também não tiver sua autenticação de chave privada configurada .
https://www.digitalocean.com/community/tutorials/how-to-configure-ssh-key-based-authentication-on-a-linux-server informa como especificar a chave pública no servidor. Basicamente, adicione a chave pública a ~ / .ssh / authorized_keys ou ~ / .ssh / authorized_keys2
Tive que lutar um pouco para fornecer uma chave privada para o Git Bash na máquina Windows. A resposta de Dan McClain em /server/194567/how-do-i-tell-git-for-windows-where-to-find-my-private-rsa-key/382801#382801 descreve isso. Um acréscimo à sua resposta, no meu caso, esperava-se que o arquivo de chave privada fosse nomeado id_rsa.pub
fonte
Para mim, adicionar os mesmos detalhes de host no Putty com a chave privada (converter com puttygen) funcionou. Qualquer comando git bash depois disso não teve problemas.
fonte
Se você usar Putty. Em seguida, certifique-se de que o Pageant está em execução e que sua chave privada está carregada no Pageant (clique com o botão direito do mouse no ícone do Pageant na barra de tarefas e clique em "Exibir chaves" no menu que aparece).
Caso contrário, quando você fizer em cmd.exe:
git clone ssh://name@host:/path/to/git/repo.git
você recebe esta mensagem "fatal: erro de protocolo: caractere de comprimento de linha inválido:"
fonte
TL; DR: Do não omitir
username@
em suas URLs remotas quando no Windows.No Linux e no Windows com o ssh padrão, você pode omitir o nome de usuário de URLs remotos, assim:
Porque o comportamento padrão do ssh é apenas usar qualquer nome de usuário com o qual você esteja conectado no momento. Se você estiver no Windows e tiver configurado o git para usar de
plink.exe
forma que possa usar a chave carregada em seupageant
, isso não funcionará, porqueplink
não tem esse mesmo comportamento de nome de usuário automático, resultando nessas mensagens de erro enigmáticas, porque funcionará solicitar o nome de usuário:Versus:
Se você já clonou um repositório de alguma forma, pode consertar os controles remotos em seu
.git/config
adicionando ousername@
ao URL remoto.fonte
git remote set-url origin myusername@...
me ajudou.Verifique se o acesso ao Shell é permitido no servidor.
fonte
O erro se transformou em: fatal: erro de protocolo: caractere de comprimento de linha inválido: fata
depois de adicionar a localização de git-upload-pack ao caminho do sistema.
O problema parece ser um apóstrofo adicionado em torno do nome do repositório: Procurando com uma ferramenta como o Process Monitor (de internos sys), que foram adicionados pelo cliente git. Parece ser um problema específico do Windows do git.
Eu tentei a mesma linha de comando no prompt do servidor: o erro completo foi "fatal: não é um repositório fornecido (ou qualquer um dos diretórios pais): .git"
Concluindo, para mim parece um bug de software. Esteja ciente de que não sou um especialista em git, é a primeira vez que uso o git, venho do subversion e forçosamente.
fonte
Nós corremos para isso também.
Não sei os detalhes do gitty sobre o que deu errado, mas no nosso caso o que causou foi que o disco no servidor estava cheio.
fonte
Pode ser um acesso de segurança em sua máquina, você está executando o Pageant (que é um agente de massa)?
fonte
você sempre pode ter um link http para seu projeto git. Você pode usar isso em vez do link ssh. Esta é apenas uma opção que você tem
fonte
Bem, eu tive esse mesmo problema (Windows 7). Tente obter o repo por senha. Eu uso Git Bash + Plink (variável de ambiente GIT_SSH) + Pageant. Excluir GIT_SSH (temporário) me ajuda. Não sei por que não consigo usar login by pass e login com RSA ao mesmo tempo ...
fonte
Resposta tardia aqui, mas espero que ajude alguém. Se for um erro de protocolo, ele tem que fazer algo com seu git local e não consegue se comunicar com o git remoto. Isso pode acontecer se você clonou o repo via ssh e algum tempo depois, você perdeu as chaves para o repo ou seu agente ssh não consegue mais encontrar essas chaves.
Solução
Gere uma nova chave e adicione-a ao seu repositório git ou configure o seu agente ssh para carregar as chaves se você ainda as tiver com você e não com outra pessoa;)
Outra solução rápida é ir para o seu
.git
diretório e editar oconfig
arquivo[remote "origin"] url
degit
parahttp
para que as chaves ssh não sejam necessárias para enviar e voltará a pedir seu nome de usuário e senha.Mudar para
fonte
Alterar o ssh exectuable de embutido para nativ em settings / version control / git fez o truque para mim.
fonte