GitHub Windows client dibelakang proxy

93

Saya mencoba agar klien GitHub untuk Windows berfungsi. Saya menggunakan komputer Win 7 x64 perusahaan di belakang proxy dan firewall perusahaan. Mengikuti berbagai posting lain dan bereksperimen dengan beberapa kombinasi variabel lingkungan dan variabel konfigurasi, saya telah menemukan satu-satunya cara untuk mendapatkan kloning dan mendorong pembaruan agar berfungsi adalah dengan menggunakan variabel lingkungan HTTPS_PROXY, termasuk ID pengguna dan kata sandi domain perusahaan lengkap saya.

Ini tidak dapat diterima dari sudut pandang keamanan. Apakah ada cara lain untuk membuatnya bekerja?

Catatan tambahan:

Berikut ini berhasil:

  • Tambahkan variabel lingkungan yang disebut HTTPS_PROXYdengan nilaihttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Hal berikut tidak berhasil:

  • Menghilangkan id pengguna dan kata sandi dari HTTPS_PROXYvariabel
  • Menggunakan variabel lingkungan yang disebut HTTP_PROXY(tidak S)
  • Menambahkan http.proxyvariabel ke file config global ( .gitconfig)
  • Menambahkan https.proxyvariabel ke file konfigurasi global

Dalam semua kasus, klien GitHub masih tidak mengenali proxy: Konten file TheLog.txt selalu menampilkan hal berikut saat startup:

[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Proxy information: (None)
[time]|INFO|thread:4|GitHub.Helpers.StartupLogger|Couldn't fetch creds for proxy

Dan diikuti dengan keluaran dari beberapa upaya otentikasi proxy yang gagal, yang semuanya menunjukkan "Kredensial hilang."

Joshua Honig
sumber
2
Menambahkan variabel lingkungan melakukan trik bagi saya, tetapi ini adalah solusi yang tidak dapat diterima, karena domain / kata sandi saya terekspos ke aplikasi apa pun yang memiliki akses ke variabel lingkungan.
Fabricio
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs menjelaskan bahwa hal ini disebabkan oleh gui (yang menggunakan proxy set windows dengan benar) memanggil msysgit di belakang layar untuk perintah git. msysgit menggunakan libcurl untuk permintaan http, yang tidak menggunakan pengaturan proxy windows. Ada pekerjaan yang sedang berlangsung untuk memperbaikinya di beberapa area termasuk dengan libgit2sharp di github.com/libgit2/libgit2sharp .
Andrew Hill

Jawaban:

131

Tambahkan entri ini ke file '.gitconfig' Anda di direktori pengguna Anda (buka% USERPROFILE%):

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

Dan jika Anda tidak ingin menyimpan kata sandi Anda dalam teks biasa, saya akan menggunakan penerusan proxy lokal seperti CNTLM yang memungkinkan Anda untuk mengarahkan semua lalu lintas melaluinya dan dapat menyimpan kata sandi yang di-hash.


Berbeda dengan pertanyaan awal, jika Anda tidak peduli jika kata sandi Anda dalam teks biasa tambahkan ini:

[http]
    proxy = http://<username>:<password>@<proxy address>:<proxy port>

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
sumber
lihat jawaban edufinn jika Anda memerlukan otorisasi terhadap proxy: proxy = http: // <username>: <password> @ <corporate proxy>: <port>
Jan Hommes
1
@JanHommes Pertanyaan asli secara khusus menanyakan tentang bagaimana melakukannya tanpa menyimpan kata sandi dalam teks biasa
Sogger
@Sogger Jika kata sandi saya menyertakan karakter "@", bagaimana cara saya mengkonfigurasi kata sandi, terima kasih atas bantuan Anda.
garis pantai
4
Jika Anda menggunakan CNTLM, pastikan Anda menunjuk proxy untuk 127.0.0.1bukan localhost, seperti yang disarankan. Di Windows, tampaknya localhost menunjuk pertama ke alamat IPv6, yang tidak didengarkan oleh CNTLM. Karena itu, git akan menunggu hingga batas waktu (beberapa menit) sebelum beralih ke alamat IPv4.
Ronan Paixão
14

Mencoba semua hal di atas - dan tidak berhasil, satu-satunya hal yang membantu saya adalah CNTLM - http://cntlm.sourceforge.net/ .

Instal dan jalankan cntlm -H, kemudian otentikasi ke proxy corp, edit file cntlm.ini dengan output cntlm, restart layanan windows. Perbarui .gitconfig dengan:

[https] proxy = localhost:3128
[http] proxy = localhost:3128

Sekarang cntlm akan melakukan semua otentikasi, dan Anda akan dapat menggunakan GitHub (dan Dropbox, btw) di belakang proxy corp. Setidaknya sampai kata sandi berikutnya berubah :) (daripada melakukan cntlm -H lagi)

Anton
sumber
2
Jika tindakan jarak jauh seperti git clone, fetch, atau pull membutuhkan waktu sangat lama untuk diselesaikan, coba alihkan .gitconfig ke: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
restart layanan windows apa?
Mukus
@Mukus cntlm - ini berjalan dalam mode layanan setelah instalasi, jika saya ingat dengan benar.
Anton
Saya membuat perubahan, memulainya kembali dan masih tidak berhasil.
Mukus
8

Saya dapat membuat GitHub Shell berfungsi dengan proxy perusahaan kami. Saya memulai GitHub Shell dan menjalankan perintah berikut:

export http_proxy=http://<username>:<password>@<corporate proxy>:3128

Saya sangat ingin membuat GUI berfungsi juga. Tetapi saya tidak ingin menyetel variabel lingkungan global Windows yang berisi informasi kredensial perusahaan saya.

Anehnya GitHub GUI Client dapat terhubung ke GitHub untuk otentikasi pengguna, tetapi satu-satunya masalah adalah kloning, menarik dan mendorong proyek dari dan ke GitHub. Sepertinya masalahnya ada pada implementasi git. Saya dapat mengonfigurasi git untuk dijalankan melalui proxy kami tanpa meletakkan kredensial saya di pengaturan global git dan itu meminta kredensial saya saat melakukan permintaan tarik atau dorong. Tapi itu hanya berfungsi di Git Shell.

edufinn.dll
sumber
Itu karena mungkin GitHub mengautentikasi secara internal dengan beberapa komponen yang menarik info proxy dari OS, mungkin beberapa solusi SingleSignOn, sementara git sendiri tidak. Saya memiliki masalah yang sama dengan SourceTree. Saya juga menemukan bahwa ketika git berfungsi, dibutuhkan waktu yang sangat lama untuk bekerja, membuat penggunaan SourceTree menjadi tidak mungkin.
Ronan Paixão
Ini mungkin karena Github mencoba menggunakan port git yang biasanya difilter karena ini bukan yang umum dilihat oleh orang-orang TI. Lihat jawaban saya untuk alternatif.
dragon788
7

Jika Anda menggunakan GitHub untuk Windows di perusahaan, kemungkinan besar Anda berada di belakang Firewall / Proxy Perusahaan yang sangat buruk. GitHub untuk Windows belum memiliki parameter proxy di GUI-nya untuk mengatur Opsi.

Untuk mengkonfigurasi GitHub untuk Windows agar menggunakan proxy perusahaan Anda, edit file .gitconfig yang biasanya ditemukan di C: \ Users \ .gitconfig atau C: \ Documents & Settings \ .gitconfig

Tutup GitHub untuk Windows; Di .gitconfig, tambahkan saja

[https] proxy = proxy.yourcompany.com:port

Manivannan
sumber
4

Saya juga mengalami masalah ini, dan mencoba menggalinya sedikit juga (membongkar klien).

Potongan kode yang menghasilkan pesan log yang kita lihat adalah sebagai berikut:

private static void LogProxyServerConfiguration()
{
    WebProxy defaultProxy = WebProxy.GetDefaultProxy();
    string str = defaultProxy.Address != (Uri)null ? defaultProxy.Address.ToString() : "(None)";
    StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy information: {0}", str);
    try
    {
        if (defaultProxy.Credentials == null)
        {
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Couldn't fetch creds for proxy", new object[0]);
        }
        else
        {
            NetworkCredential credential = defaultProxy.Credentials.GetCredential(GitHubClient.GitHubDotComUri, "Basic");
            StartupLogger.log.Info((IFormatProvider)CultureInfo.InvariantCulture, "Proxy is authenticated: {0}", credential != null && !string.IsNullOrWhiteSpace(credential.UserName));
        }
    }
    catch (Exception ex)
    {
        StartupLogger.log.InfoException("Couldn't fetch creds for proxy", ex);
    }
}

Jadi blok ini hanya mencatat informasi proxy yang diatur di IE . Pesan log tampaknya tidak ada hubungannya dengan apa yang telah kita siapkan di file konfigurasi atau variabel lingkungan.

DustinTheDev
sumber
3

saya tidak tahu tentang firewall Anda, tetapi kampus saya menggunakan proxy

apakah Anda menggunakan git gui? EDIT : baru saja perhatikan bahwa Anda menggunakan klien github untuk windows

Saya menggunakan tortoisegit dan sangat mudah untuk mengatur proxy. Cukup klik kanan di mana saja, tortoisegit> jaringan, aktifkan server proxy dan setel alamat server, nama pengguna, dan kata sandi. selesai

Sejauh yang saya ingat, tortoisegit juga akan bekerja di luar kotak dengan github.

bysreg
sumber
2

Berikut cara mengatur proxy di github

git config --global http.proxy http://<username>:<pass>@<ip>:<port>
git config --global https.proxy http://<username>:<pass>@<ip>:<port>

Di sini, di kampus saya, kami tidak memiliki nama pengguna dan kata sandi, jadi jika ip perguruan tinggi kami adalah 172.16.10.10 dan port adalah 8080

git config --global http.proxy http://172.16.10.10:8080
git config --global https.proxy http://172.16.10.10:8080

PS -> Saya akan merekomendasikan menggunakan metode ini untuk mengatur proxy karena segala sesuatunya akan jatuh pada tempatnya saat Anda akan mempelajari Sumber lebih lanjut

royatirek
sumber
1

Saya menemukan blog ini bermanfaat. Ini menjelaskan proxy ntlmaps . Ini mungkin kurang aman, tetapi bekerja dengan lancar. Saya tidak bisa mendapatkan cntlm bekerja.

Aksakal hampir pasti biner
sumber
1

Bagi kami, pemecahannya melibatkan dua hal yang berbeda. Pertama, seperti yang dijelaskan dalam jawaban Sogger, Anda perlu menambahkan entri ke .gitconfigfile Anda , yang terletak di %USERPROFILE%.

[http]
    proxy = http://<proxy address>:<proxy port>

[https]
    proxy = https://<proxy address>:<proxy port>

Kedua, (dan ini adalah bagian yang hilang bagi kami,) Anda perlu mengonfigurasi pengecualian pada server proxy untuk mengizinkan lalu lintas proxy yang tidak diautentikasi ke*.github.com

Di iPrism, tampilannya seperti ini: masukkan deskripsi gambar di sini

Masalahnya bukan pada proksi, tetapi otentikasi . Dengan mengabaikan persyaratan autentikasi, komunikasi yang diperlukan dapat digandakan dan bekerja dengan project menggunakan klien desktop GitHub.

Perhatikan juga bahwa pendekatan ini tidak memerlukan penyimpanan kredensial proxy dalam .gitconfigfile.

AdamsTips
sumber