Forma realmente detalhada de testar a conexão do Git através do SSH?

72

Ao usar o GIT, tenho problemas com o uso do GIT sobre SSH , e como funciona muito bem tanto no trabalho quanto em casa com um modem diferente, obviamente é meu modem doméstico que está funcionando. Não tenho problemas para me conectar por HTTP.

Então, suponho que seja um problema de SSH, mas não sou especialista em usá-lo diretamente. Existe algum comando que eu possa executar que estabeleça uma conexão de "teste" e me avise exatamente quando e onde a linha ocorre o problema?

Praticamente todos os comandos "maiores" (como fetch , clone ou push com muitos dados) de git (mesmo quando executados com -v ) apenas "travar" no meio de conectando-se remotamente sem nenhuma indicação de por que eles pararam, então eles são inúteis.

Existe alguma maneira de obter mais detalhes sobre o que está acontecendo na conexão SSH?

    
por IQAndreas 25.08.2013 / 04:40

5 respostas

75

Eu tive um problema semelhante. Para depuração, adicionei uma linha no meu ssh_config. Aqui está como eu fiz:

git remote -v

Lá você encontrará uma linha como esta:

origin  [email protected]:me/test.git (fetch)
origin  [email protected]:me/test.git (push)

Nesse caso, o host é github.com . Agora você pode adicionar uma entrada de host em sua configuração ssh:

vim ~/.ssh/config

E adicione:

Host github.com
    LogLevel DEBUG3

Ao usar as operações do git, você deve receber muitas mensagens de depuração, agora. Para obter menos mensagens de depuração, tente usar DEBUG1

Para as versões do GIT > = 2.3.0 veja a resposta do @Flimm para uma solução mais inteligente.

    
por Trendfischer 27.10.2014 / 13:52
75

Variável de ambiente

Do Git versão 2.3.0, você pode usar a variável de ambiente GIT_SSH_COMMAND e passar o argumento -v verbose como este:

GIT_SSH_COMMAND="ssh -v" git clone example

Para ser mais detalhado, torne-o -vvv :

GIT_SSH_COMMAND="ssh -vvv" git clone example

Configuração do Git

A partir da versão 2.10.0 do Git, que estará nos repositórios do Ubuntu 17.04, você pode salvar esta configuração globalmente ou por repo como neste exemplo:

git config core.sshCommand "ssh -vvv"
git pull
    
por Flimm 08.05.2015 / 11:44
14

Ao ler man git , existem algumas variáveis ambientais úteis que você pode definir, GIT_TRACE_PACKET e GIT_TRACE . Por exemplo:

GIT_TRACE_PACKET=true git clone ssh://[...]

Um pouco atrasado para o jogo, mas espero que isso ajude alguém!

    
por bcherny 02.11.2014 / 20:42
5

Por man ssh :

 -v      Verbose mode.  Causes ssh to print debugging messages about its progress.  This
         is helpful in debugging connection, authentication, and configuration problems.
         Multiple -v options increase the verbosity.  The maximum is 3.

Então, tente ssh -v . Se isso não disser o que você precisa saber, você pode adicionar um ou dois v s para obter informações de depuração ainda mais detalhadas. Para o Github em particular, tente ssh -vvvT [email protected] .

Geralmente, na minha experiência, uma sessão SSH interrompida durante a configuração acontece quando o cliente não consegue concluir o método de autenticação escolhido. Verifique se sua chave privada está no lugar certo com as permissões corretas e corresponde à chave pública que você forneceu ao Github.

    
por tgies 25.08.2013 / 06:31
3

Eu não vejo uma maneira de dizer ao git (1) o comando externo para usar o ssh (1), mas como uma solução alternativa, simplesmente renomeie / path / to / ssh para /path/to/ssh.orig, crie um wrapper de script de shell / caminho / para / ssh e adicione os sinalizadores -v:

$ sudo mv /usr/bin/ssh /usr/bin/ssh.orig
$ sudo vim /usr/bin/ssh
$ cat /usr/bin/ssh
#!/bin/sh

if [ -x /usr/bin/ssh.orig ]; then
    exec /usr/bin/ssh.orig -v -v -v "${@}"
fi

$ sudo chmod a+x /usr/bin/ssh

Eu recebo uma saída detalhada ao executar comandos git operando sobre um transporte ssh. Uma vez feita a depuração, exclua o script e restaure o /path/to/ssh.orig para / path / to / ssh.

    
por ScoobiFreeBSD 23.10.2014 / 19:04