Vraag Echt uitgebreide manier om de Git-verbinding via SSH te testen?


Als ik GIT gebruik, heb ik dat gedaan problemen met het gebruik van GIT via SSHen aangezien het prima werkt, zowel op het werk als thuis met een andere modem, is het duidelijk mijn thuismodem die acteert. Ik heb geen problemen om verbinding te maken via HTTP.

Dus ik neem aan dat het een SSH-probleem is, maar ik ben geen expert in het rechtstreeks gebruiken ervan. Is er een commando dat ik kan uitvoeren om een ​​"test" -verbinding op te zetten, en laat ik precies weten wanneer en waar het probleem zich voordoet?

Vrijwel alle "grotere" commando's (zoals fetch, cloneof push met veel data) van git (zelfs als het wordt uitgevoerd met -v) gewoon "hangen" in het midden van op afstand verbinden zonder enige aanwijzing waarom ze zijn gestopt, dus hebben ze geen zin.

Is er een manier om meer informatie te krijgen over wat er gebeurt in de SSH-verbinding?


66
2017-08-25 02:40


oorsprong




antwoorden:


Ik had een soortgelijk probleem. Voor foutopsporing heb ik een regel toegevoegd in mijn ssh_config. Dit is hoe ik het heb gedaan:

git remote -v

Daar vindt u een regel als deze:

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

In dit geval is de host github.com. Nu kun je een Host-Entry in je ssh config toevoegen:

vim ~/.ssh/config

En voeg toe:

Host github.com
    LogLevel DEBUG3

Over het gebruik van git-operaties zou je nu genoeg foutopsporingsberichten moeten krijgen. Probeer te gebruiken om minder foutopsporingsberichten te krijgen DEBUG1

Voor GIT-versies> = 2.3.0 zie de antwoord van @Flimm voor een slimmere oplossing.


70
2017-10-27 12:52





Omgevingsvariabele

Vanaf versie 2.3.0 van Git kunt u de omgevingsvariabele gebruiken GIT_SSH_COMMAND en passeer de -v uitgebreid argument als dit:

GIT_SSH_COMMAND="ssh -v" git clone example

Om extra uitgebreid te zijn, maak het -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

Vanaf Git versie 2.10.0, die in de repo's van Ubuntu 17.04 staat, kun je deze configuratie globaal opslaan, of per repo zoals in dit voorbeeld:

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

65
2018-05-08 09:44



Voor mij tenminste, als ik dit doe: GIT_SSH_COMMAND="ssh -v" git clone example Ik kan de SSH-versie debuggen, het is erop gedrukt Cloning into bericht, maar falen op git clone. Nadat ik het heb verwijderd GIT_SSH_COMMAND het werkt. Op het einde diende het doel. - Paulo Oliveira
Voor eenmalig is dit beter: git -c core.sshCommand="ssh -vvv" pull - Joseph K. Strauss
Zou het geaccepteerde antwoord moeten zijn - Todd Freed
git config --global core.sshCommand "ssh -vvv" git clone example - Azodium


Doorlezen man git, er zijn enkele bruikbare omgevingsvariabelen die u kunt instellen, GIT_TRACE_PACKET en GIT_TRACE. Bijvoorbeeld:

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

Een beetje laat aan het spel, maar hopelijk helpt dit iemand!


14
2017-11-02 19:42



Dit is handig, maar je krijgt geen berichten over verbindingsproblemen met SSH. Maar als de SSH-verbinding werkt, is dit de manier om verder te debuggen. - Trendfischer


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.

Dus probeer ssh -v. Als dat je niet vertelt wat je moet weten, kun je er een of twee toevoegen vs voor nog meer gedetailleerde informatie over foutopsporing. Probeer Github in het bijzonder ssh -vvvT git@github.com.

Meestal gebeurt het in mijn ervaring dat een SSH-sessie die tijdens de installatie hangt, plaatsvindt wanneer de client de gekozen authenticatiemethode niet kan voltooien. Controleer of uw persoonlijke sleutel op de juiste plaats staat met de juiste machtigingen en overeenkomt met de openbare sleutel die u Github hebt gegeven.


5
2017-08-25 04:31



Bedankt voor het antwoord, maar ik had de vraag waarschijnlijk anders moeten stellen (aangezien GitHub dergelijke directe SSH-verbindingen niet toestaat). Ik heb het bericht en de titel bewerkt, maar is het beter om deze te verwijderen en in plaats daarvan een nieuwe vraag te maken? - IQAndreas
@IQAndreas, GitHub staat dergelijke SSH-verbindingen toe in die zin dat de authenticatiefase zal worden uitgevoerd en als het probleem inderdaad in de SSH-stap gebeurt, zul je het op die manier zien. Als je merkt dat je zelfs niet zover kunt komen, is er iets aan de hand dat verhindert dat de verbinding zelfs wordt gemaakt. - tgies
Ik word prima geverifieerd en soms push/pull op de repo zonder problemen. Maar vaak "hangt" het gewoon in het midden van het commando en zal het niet doorgaan (vooral als ik grote hoeveelheden gegevens overdraag, zoals een grote clone of push). Er zijn geen foutmeldingen, het zit gewoon daar en gaat niet verder. - IQAndreas


Ik zie geen manier om git (1) het externe commando te geven om te gebruiken voor ssh (1), maar als een tijdelijke oplossing, simpelweg hernoemen / path / to / ssh naar /path/to/ssh.orig, maak een shell script-wrapper / pad / naar / ssh en voeg de -v-vlaggen toe:

$ 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

Ik krijg uitgebreide uitvoer bij het uitvoeren van git-commando's die werken via een ssh-transport. Als u klaar bent met foutopsporing, verwijdert u het script en herstelt u /path/to/ssh.orig naar / path / to / ssh.


3
2017-10-23 17:04



In plaats van bestanden te verplaatsen /usr/bin, overweeg om het wrapper-script in te voegen /usr/local/bin. - muru
Tenminste op mijn vreemde Windows-installatie, de omgevingsvariabele GIT_SSH kan worden ingesteld om naar het binaire getal te wijzen dat Git moet gebruiken. - Coderer