Modo davvero dettagliato per testare la connessione Git su SSH?


109

Quando utilizzo GIT, ho problemi con l'utilizzo di GIT su SSH e, dato che funziona perfettamente sia a lavoro che a casa con un modem diverso, è ovviamente il mio modem di casa che funziona. Non ho problemi di connessione tramite HTTP.

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

Praticamente tutti i comandi "più grandi" (come fetch, cloneo pushcon molti dati) da git(anche quando eseguiti con -v) si "bloccano" nel mezzo della connessione in remoto senza alcuna indicazione sul motivo per cui si sono interrotti, quindi non sono utili .

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

Risposte:


113

Variabile d'ambiente

Da Git versione 2.3.0, puoi usare la variabile d'ambiente GIT_SSH_COMMANDe passare l' -vargomento dettagliato in questo modo:

GIT_SSH_COMMAND="ssh -v" git clone example

Per essere più dettagliato, fallo -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Config

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

git config core.sshCommand "ssh -vvv"
git pull

Almeno per me, se lo faccio: GIT_SSH_COMMAND="ssh -v" git clone exampleposso eseguire il debug della versione SSH, viene stampato dopo il Cloning intomessaggio, ma non riesco a git clone. Dopo averlo rimosso GIT_SSH_COMMANDfunziona. Alla fine, servito allo scopo.
Paulo Oliveira,

5
Per una volta sarà meglio:git -c core.sshCommand="ssh -vvv" pull
Joseph K. Strauss,

git config --global core.sshCommand "ssh -vvv" git clone example
Azodium,

81

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

git remote -v

Lì troverai una linea come questa:

origin  git@github.com:me/test.git (fetch)
origin  git@github.com:me/test.git (push)

In questo caso l'host è github.com. Ora puoi aggiungere una voce host nella tua configurazione ssh:

vim ~/.ssh/config

E aggiungi:

Host github.com
    LogLevel DEBUG3

Usando le operazioni git, dovresti ricevere molti messaggi di debug, ora. Per ottenere meno messaggi di debug, prova a utilizzareDEBUG1

Per le versioni GIT> = 2.3.0 vedere la risposta di @Flimm per una soluzione più intelligente.


14

Leggendo man git, ci sono alcune variabili ambientali utili che puoi impostare GIT_TRACE_PACKETe GIT_TRACE. Per esempio:

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

Un po 'in ritardo al gioco, ma spero che questo aiuti qualcuno!


1
Questo è utile, ma non ricevi alcun messaggio sui problemi di connessione con SSH. Ma se la connessione SSH funziona, questo è il modo per eseguire il debug più avanti.
Trendfischer,

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 ciò non ti dice quello che devi sapere, puoi aggiungere uno o due vsecondi per informazioni di debug ancora più dettagliate. Per Github in particolare, prova ssh -vvvT git@github.com.

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


Grazie per la risposta, ma probabilmente avrei dovuto porre la domanda in modo diverso (dal momento che GitHub non consente connessioni dirette SSH del genere). Ho modificato il post e il titolo, ma è meglio scartare questo e creare invece una nuova domanda?
IQAndreas,

@IQAndreas, GitHub consente connessioni SSH del genere nel senso che verrà eseguita la fase di autenticazione e se il problema si verifica effettivamente nel passaggio SSH, lo vedrai in questo modo. Se stai scoprendo che non riesci nemmeno ad arrivare così lontano, sta succedendo qualcosa che impedisce persino di stabilire la connessione.
tgies,

1
Sono stato autenticato bene, a volte push/ pullsul repository senza problemi. Ma spesso si "blocca" nel mezzo del comando e non continuerà (soprattutto quando trasferisco grandi quantità di dati come un grande cloneo push). Non ci sono messaggi di errore, si trova lì e non continua.
IQAndreas,

3

Non vedo un modo per dire a git (1) il comando esterno da usare per ssh (1), ma come soluzione alternativa, basta rinominare / path / to / ssh in /path/to/ssh.orig, creare una shell wrapper di script / percorso / a / ssh e aggiungere nei 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 dettagliato quando eseguo i comandi git che operano su un trasporto ssh. Al termine del debug, eliminare lo script e ripristinare /path/to/ssh.orig in / path / to / ssh.


4
Invece di spostare i file /usr/bin, considera di inserire lo script wrapper /usr/local/bin.
muru,

2
Almeno sulla mia strana installazione di Windows, la variabile di ambiente GIT_SSHpuò essere impostata in modo che punti al binario che Git deve usare.
Coderer,

Come detto, non vorrai assolutamente modificare il file ssh originale, ma avrei delle riserve sulla soluzione alternativa in / usr / local /. Non è trasparente ed è facilmente calpestabile. MEGLIO: metti il ​​tuo script di soluzione alternativa in $ HOME / bin e aggiungi quella nuova directory bin nella variabile $ PATH dell'utente, prima di altri segmenti PATH. E prima di farlo, verificherei se non esiste una soluzione ENV var ancora migliore (questa risposta è vecchia).
Scott Prive,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.