Modo davvero prolisso per testare la connessione Git su SSH?

78

Quando usi GIT, ho problemi con l'utilizzo di GIT su SSH , e dal momento che funziona bene sia dal lavoro, sia a casa con un modem diverso, è ovviamente il mio modem domestico che sta agendo. Non ho problemi di connessione su HTTP.

Quindi, presumo che si tratti di un problema SSH, ma non sono esperto nell'usarlo direttamente. Esiste un comando che posso eseguire che imposta una connessione "test" e mi consente di sapere esattamente quando e dove si verifica il problema?

Praticamente tutti i comandi "più grandi" (come fetch , clone o push con molti dati) da git (anche se eseguiti con -v ) semplicemente "bloccati" nel mezzo di collegandosi da remoto senza indicazioni sul motivo per cui si sono fermati, quindi non sono di alcuna utilità.

C'è un modo per ottenere maggiori dettagli su ciò che sta accadendo nella connessione SSH?

    
posta IQAndreas 25.08.2013 - 04:40

5 risposte

81

Variabile d'ambiente

Da Git versione 2.3.0, puoi usare la variabile di ambiente GIT_SSH_COMMAND e passare l'argomento verb% di% co_de come questo:

GIT_SSH_COMMAND="ssh -v" git clone example

Per essere più dettagliato, rendilo -v :

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

Da Git versione 2.10.0, che sarà nei repository di Ubuntu 17.04, è possibile salvare questa configurazione globalmente, o per repository come in questo esempio:

git config core.sshCommand "ssh -vvv"
git pull
    
risposta data Flimm 08.05.2015 - 11:44
75

Ho avuto un problema simile. Per il debug ho aggiunto una riga nel mio ssh_config. Ecco come l'ho fatto:

git remote -v

Qui troverai una riga come questa:

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

In questo caso l'host è github.com . Ora puoi aggiungere una voce Host in ssh config:

vim ~/.ssh/config

E aggiungi:

Host github.com
    LogLevel DEBUG3

Se usi le operazioni git, dovresti ricevere molti messaggi di debug, ora. Per ottenere messaggi di debug minori, prova a utilizzare DEBUG1

Per versioni GIT & gt; = 2.3.0 vedi la risposta di @Flimm per una soluzione più intelligente.

    
risposta data Trendfischer 27.10.2014 - 13:52
14

Leggendo attraverso man git , ci sono alcune variabili ambientali utili che puoi impostare, GIT_TRACE_PACKET e GIT_TRACE . Ad esempio:

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

Un po 'tardi per il gioco, ma speriamo che questo aiuti qualcuno!

    
risposta data bcherny 02.11.2014 - 20:42
5

Per 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.

Quindi prova ssh -v . Se questo non ti dice cosa devi sapere, puoi aggiungere uno o due v s per informazioni di debug ancora più dettagliate. In particolare, per Github, prova ssh -vvvT [email protected] .

Di solito, nella mia esperienza, una sessione SSH sospesa durante l'installazione si verifica quando il client non è in grado di completare il metodo di autenticazione scelto. Verifica che la tua chiave privata sia nel posto giusto con le giuste autorizzazioni e corrisponda alla chiave pubblica che hai assegnato a Github.

    
risposta data tgies 25.08.2013 - 06:31
3

Non vedo un modo per dire a git (1) il comando esterno da usare per ssh (1), ma come soluzione alternativa, semplicemente rinominare / percorso / su / ssh in /path/to/ssh.orig, crea un wrapper di script di shell / percorso / a / ssh e aggiungi i flag -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

Ottengo un output prolisso quando eseguo comandi git che operano su un trasporto ssh. Una volta fatto il debug, cancella lo script e ripristina /path/to/ssh.orig in / percorso / su / ssh.

    
risposta data ScoobiFreeBSD 23.10.2014 - 19:04

Leggi altre domande sui tag