Pertanyaan Benar-benar cara yang tepat untuk menguji koneksi Git melalui SSH?


Saat menggunakan GIT, saya punya masalah dengan menggunakan GIT melalui SSH, dan karena berfungsi dengan baik baik dari tempat kerja, dan di rumah dengan modem yang berbeda, jelas modem rumah saya yang berulah. Saya tidak memiliki masalah koneksi melalui HTTP.

Jadi, saya menganggap ini masalah SSH, tapi saya bukan ahli dalam menggunakannya secara langsung. Apakah ada perintah yang dapat saya jalankan yang membuat koneksi "test", dan memberi tahu saya kapan dan di mana sepanjang masalah terjadi?

Hampir semua perintah "lebih besar" (seperti fetch, clone, atau push dengan banyak data) dari git (bahkan ketika dijalankan dengan -v) hanya "menggantung" di tengah-tengah koneksi jarak jauh tanpa indikasi mengapa mereka berhenti, sehingga tidak ada gunanya.

Apakah ada cara saya dapat memperoleh lebih banyak rincian tentang apa yang terjadi dalam koneksi SSH?


66
2017-08-25 02:40


asal




Jawaban:


Saya memiliki masalah serupa. Untuk debugging saya menambahkan baris di ssh_config saya. Inilah cara saya melakukannya:

git remote -v

Di sana Anda akan menemukan garis seperti ini:

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

Dalam hal ini tuan rumah adalah github.com. Sekarang Anda dapat menambahkan Host-Entry di konfigurasi ssh Anda:

vim ~/.ssh/config

Dan tambahkan:

Host github.com
    LogLevel DEBUG3

Saat menggunakan operasi git, Anda harus mendapatkan banyak pesan debug, sekarang. Untuk mendapatkan pesan debug yang lebih sedikit, coba gunakan DEBUG1

Untuk Versi GIT> = 2.3.0 lihat jawaban dari @Flimm untuk solusi yang lebih cerdas.


70
2017-10-27 12:52





Variabel lingkungan

Dari Git versi 2.3.0, Anda dapat menggunakan variabel lingkungan GIT_SSH_COMMAND dan lulus -v argumen verbose seperti ini:

GIT_SSH_COMMAND="ssh -v" git clone example

Untuk menjadi ekstra verbose, buatlah -vvv:

GIT_SSH_COMMAND="ssh -vvv" git clone example

Git config

Dari Git versi 2.10.0, yang akan ada di repositori Ubuntu 17.04, Anda dapat menyimpan konfigurasi ini secara global, atau per repo seperti pada contoh ini:

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

65
2018-05-08 09:44



Setidaknya bagi saya, Jika saya melakukan ini: GIT_SSH_COMMAND="ssh -v" git clone example Saya bisa men-debug versi SSH, itu dicetak setelah Cloning into pesan, tetapi gagal di git clone. Setelah saya hapus GIT_SSH_COMMAND berhasil. Pada akhirnya, melayani tujuan itu. - Paulo Oliveira
Untuk satu kali ini akan menjadi lebih baik: git -c core.sshCommand="ssh -vvv" pull - Joseph K. Strauss
Seharusnya jawaban yang diterima - Todd Freed
git config --global core.sshCommand "ssh -vvv" git clone example - Azodium


Membaca man git, ada beberapa variabel lingkungan yang bermanfaat yang dapat Anda tetapkan, GIT_TRACE_PACKET dan GIT_TRACE. Sebagai contoh:

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

Sedikit terlambat ke gim, tapi semoga ini membantu seseorang!


14
2017-11-02 19:42



Ini sangat membantu, tetapi Anda tidak mendapatkan pesan apa pun tentang masalah koneksi dengan SSH. Tetapi jika koneksi SSH berfungsi, ini adalah cara untuk melakukan debug lebih lanjut. - 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.

Jadi, cobalah ssh -v. Jika itu tidak memberi tahu Anda apa yang perlu Anda ketahui, Anda dapat menambahkan satu atau dua vs untuk informasi debugging yang lebih rinci. Khusus untuk Github, cobalah ssh -vvvT git@github.com.

Biasanya, menurut pengalaman saya, sesi SSH yang digantung saat pengaturan terjadi ketika klien tidak dapat menyelesaikan metode otentikasi yang dipilih. Periksa apakah kunci pribadi Anda berada di tempat yang tepat dengan izin yang benar dan cocok dengan kunci publik yang Anda berikan Github.


5
2017-08-25 04:31



Terima kasih atas jawabannya, tapi saya mungkin harus menanyakan pertanyaan itu secara berbeda (karena GitHub tidak mengizinkan koneksi SSH langsung seperti itu). Saya mengedit posting dan judul, tetapi apakah lebih baik untuk membuang yang ini dan membuat pertanyaan baru? - IQAndreas
@IQAndreas, GitHub memungkinkan koneksi SSH seperti itu dalam arti bahwa fase otentikasi akan dilakukan dan jika masalahnya memang terjadi dalam langkah SSH, Anda akan melihatnya seperti itu. Jika Anda menemukan bahwa Anda bahkan tidak bisa sampai sejauh itu, sesuatu sedang terjadi yang mencegah koneksi dari bahkan dibuat. - tgies
Saya sedang diautentikasi dengan baik, dan kadang-kadang push/pull di repo tanpa masalah. Tetapi seringkali hanya "hang" di tengah-tengah perintah dan tidak akan berlanjut (terutama ketika saya mentransfer sejumlah besar data seperti besar clone atau push). Tidak ada pesan kesalahan, itu hanya duduk di sana dan tidak berlanjut. - IQAndreas


Saya tidak melihat cara untuk memberitahu git (1) perintah eksternal yang akan digunakan untuk ssh (1), tetapi sebagai solusi, cukup ganti nama / jalur / ke / ssh ke /path/to/ssh.orig, buat shell wrapper script / path / ke / ssh, dan tambahkan di -v flags:

$ 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

Saya mendapatkan output verbose ketika menjalankan perintah git yang beroperasi melalui transport ssh. Setelah selesai melakukan debug, hapus skrip dan pulihkan /path/to/ssh.orig ke / path / ke / ssh.


3
2017-10-23 17:04



Alih-alih memindahkan file /usr/bin, pertimbangkan untuk memasukkan skrip pembungkus /usr/local/bin. - muru
Setidaknya pada Windows menginstal aneh saya, variabel lingkungan GIT_SSH dapat diatur untuk menunjuk ke biner yang Anda inginkan Git untuk digunakan. - Coderer