Git bağlantısını SSH üzerinden test etmek için gerçekten ayrıntılı bir yol?


109

GIT kullanırken, GIT'i SSH üzerinden kullanmakta sorun yaşıyorum ve hem işten hem de evde farklı bir modemle çalıştığı için, benim çalışan yeni modemim. HTTP üzerinden bağlanmada sorunum yok.

Yani, bunun bir SSH sorunu olduğunu kabul ediyorum, ancak doğrudan kullanma konusunda uzman değilim. "Test" bağlantısı kuran ve sorunun tam olarak ne zaman ve nerede gerçekleştiğini bilmemi sağlayan herhangi bir komut var mı?

Hemen hemen tüm (örneğin, "daha büyük" komutları fetch, cloneya pushçok veri ile) den git(çalıştırmak bile -v) sadece onlar durmuş neden olarak hiçbir gösterge ile uzaktan bağlantı ortasında "asmak", bu yüzden hiçbir faydası vardır .

SSH bağlantısında neler olup bittiği hakkında daha fazla bilgi alabilmemin bir yolu var mı?

Yanıtlar:


113

Çevre değişkeni

Git sürüm 2.3.0'dan, ortam değişkenini kullanabilir GIT_SSH_COMMANDve aşağıdaki -vgibi ayrıntılı bağımsız değişkeni iletebilirsiniz :

GIT_SSH_COMMAND="ssh -v" git clone example

Fazladan ayrıntılı olmak için şunu yapın -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

Ubuntu 17.04 depolarında yer alan Git sürüm 2.10.0'dan, bu yapılandırmayı genel olarak veya bu örnekte olduğu gibi repo başına kaydedebilirsiniz:

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

En azından benim için, Bunu yaparsam: GIT_SSH_COMMAND="ssh -v" git clone exampleSSH sürümünde hata ayıklayabilirim, Cloning intomesajdan sonra yazdırılır , ancak başarısız olur git clone. Kaldırdıktan GIT_SSH_COMMANDsonra çalışır. Sonunda amaca hizmet etti.
Paulo Oliveira

5
Bir kerelik olarak bu daha iyi olacak:git -c core.sshCommand="ssh -vvv" pull
Joseph K. Strauss

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

81

Ben de benzer bir problem yaşadım. Hata ayıklama için ssh_config içinde bir satır ekledim. İşte nasıl yaptım:

git remote -v

Orada böyle bir çizgi bulacaksınız:

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

Bu durumda ev sahibi github.com. Şimdi ssh config içine bir Host-Entry ekleyebilirsiniz:

vim ~/.ssh/config

Ve Ekle:

Host github.com
    LogLevel DEBUG3

Git işlemlerini kullanırken, şimdi bol miktarda hata ayıklama mesajı almalısınız. Daha az hata ayıklama mesajı almak için kullanmayı deneyin.DEBUG1

İçin GYTE sürümleri> = 2.3.0 bkz @Flimm cevabını daha akıllı çözüm.


14

Okumak man git, ayarlayabileceğiniz bazı faydalı çevresel değişkenler vardır GIT_TRACE_PACKETve GIT_TRACE. Örneğin:

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

Oyuna biraz geç kaldın ama umarım bu birine yardımcı olur!


1
Bu yardımcı olur, ancak SSH ile bağlantı sorunları hakkında hiçbir mesaj alamazsınız. Fakat eğer SSH bağlantısı çalışıyorsa, bu daha fazla hata ayıklamanın yoludur.
Trendfischer

5

Başına 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.

Öyleyse dene ssh -v. Bu size bilmeniz gerekenleri söylemezse, vdaha ayrıntılı hata ayıklama bilgileri için bir veya iki saniye ekleyebilirsiniz . Özellikle Github için deneyin ssh -vvvT git@github.com.

Genellikle, deneyimime göre, istemci seçilen kimlik doğrulama yöntemini tamamlayamadığında, kurulum sırasında asılı olan bir SSH oturumu gerçekleşir. Özel anahtarınızın doğru izinlerle doğru yerde olup olmadığını kontrol edin ve Github'a verdiğiniz ortak anahtarla eşleşsin.


Cevabınız için teşekkürler, fakat muhtemelen soruyu farklı bir şekilde sormalıydım (GitHub bunun gibi doğrudan SSH bağlantılarına izin vermediğinden). Gönderiyi ve başlığı değiştirdim, ancak bunu atmak ve bunun yerine yeni bir soru oluşturmak daha mı iyi?
IQAndreas 12:13

@IQAndreas, GitHub, kimlik doğrulama aşamasının gerçekleştirileceği şekilde SSH bağlantılarına izin verir ve sorun gerçekten SSH adımında oluyorsa, bu şekilde göreceksiniz. O kadar uzağa gidemeyeceğinizi tespit ediyorsanız, bağlantının kurulmasını bile engelleyen bir şeyler oluyor.
tgies

1
Ben sadece iyi ve bazen push/ sorunsuz pullrepo üzerinde kimlik doğrulaması yapıyorum . Ancak çoğu zaman sadece komutun ortasında "kilitlenir" ve devam etmeyecek (özellikle büyük cloneveya büyük miktarda veri aktarırken push). Hata mesajı yok, sadece orada oturuyor ve devam etmiyor.
IQAndreas 13:13

3

Git (1) ssh (1) için kullanılacak harici komutu söylemenin bir yolunu göremiyorum, ancak geçici bir çözüm olarak, /patur / to / ssh ile /path/to/ssh.orig için bir kabuk oluşturun. komut dosyası sarıcı / yol / to / ssh ve -v bayraklarını ekleyin:

$ 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

Bir ssh aktarımı üzerinde çalışan git komutlarını çalıştırırken ayrıntılı çıktılar alıyorum. Hata ayıklama işlemi bittiğinde betiği silin ve /path/to/ssh.orig dosyasını / path / to / ssh konumuna geri yükleyin.


4
Dosyaları taşımak yerine /usr/bin, sarma komut dosyasını içine koymayı düşünün /usr/local/bin.
muru

2
En azından garip Windows kurulumumda, ortam değişkeni GIT_SSHGit'in kullanmasını istediğiniz ikiliyi gösterecek şekilde ayarlanabilir.
Kodlayıcı

Dediğim gibi, kesinlikle orijinal ssh dosyasını değiştirmek istemezsiniz, ancak / usr / local / içindeki geçici çözümle ilgili çekincelerim var. Şeffaf değildir ve kolayca durur. DAHA İYİ: geçici çözüm komut dosyanızı $ HOME / bin dizinine yerleştirin ve bu yeni bin dizinini, diğer PATH segmentlerinin önüne, kullanıcının $ PATH değişkenine ekleyin. Ve bunu yapmadan önce, daha iyi bir ENV var çözümü olup olmadığını kontrol ederdim (bu cevap eski).
Scott Prive
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.