Git proxy kurulumu, trafiği bir aracı sunucu üzerinden yönlendirmek için Git'in http.proxy ve https.proxy ayarlarını yapılandırmayı, ya da HTTP_PROXY ve HTTPS_PROXY gibi ortam değişkenlerinden yararlanmayı, ya da SSH tabanlı Git işlemleri için SSH yapılandırmasında ProxyCommand kullanmayı kapsar.
Git proxy gereksinimlerini anlamak
Kurumsal güvenlik duvarları, ağ güvenliği politikaları veya kısıtlı internet erişimi çoğu zaman Git trafiğinin bir proxy sunucusu üzerinden yönlendirilmesini zorunlu kılar. Bu, git clone, git fetch, git pull ve git push gibi işlemler için geçerlidir. Yapılandırma yöntemi Git URL protokolüne bağlıdır: https:// (veya http://) HTTP/HTTPS proxy'leri kullanırken, ssh:// (veya git@) SSH'a özgü proxy yöntemlerini kullanır.
HTTP/HTTPS Git proxy yapılandırması
https:// veya http:// URL'leriyle erişilen Git depoları için Git, HTTP/HTTPS proxy ayarlarını kullanır.
Git yapılandırma yöntemi (git config)
Git'te HTTP/HTTPS proxy yapılandırmak için önerilen yöntem budur. Ayarlar global (tüm depolar için) veya tek bir depoya özgü olabilir.
Global yapılandırma
Sistemdeki tüm Git depoları için proxy'yi global olarak yapılandırmak üzere:
# For HTTP proxy (e.g., for https://github.com URLs through an http proxy)
git config --global http.proxy http://proxy.example.com:8080
# For HTTPS proxy (e.g., for https://github.com URLs through an https proxy)
# Note: Often an HTTPS proxy is configured similarly to an HTTP proxy,
# but traffic is explicitly tunneled.
git config --global https.proxy http://proxy.example.com:8080
Proxy kimlik doğrulaması gerektiriyorsa:
git config --global http.proxy http://username:[email protected]:8080
git config --global https.proxy http://username:[email protected]:8080
Güvenlik açısından, parolayı doğrudan URL'ye gömmek yerine Git kimlik bilgilerini sorabilir veya bir credential helper üzerinden alabilir. Parolayı yazmazsanız Git parolayı sorar.
Depo bazında yapılandırma
Belirli bir depo için proxy yapılandırmak üzere deponun kök dizinine geçin ve --global bayrağını kullanmayın:
cd /path/to/my/repo
git config http.proxy http://proxy.example.com:8080
git config https.proxy http://proxy.example.com:8080
Bu ayarlar ilgili deponun .git/config dosyasında saklanır.
Belirli host'lar için proxy'yi devre dışı bırakma
Belirli alan adlarında (örneğin dahili Git sunucularında) proxy'yi atlamak için http.noProxy kullanın:
git config --global http.noProxy "localhost,127.0.0.1,*.internal.com"
Birden fazla host virgülle ayrılabilir.
SSL sertifika doğrulaması
Şeffaf veya araya giren proxy'lerin (MITM proxy'ler) kullanıldığı kurumsal ortamlarda, proxy kaynak sunucunun sertifikası yerine kendi sertifikasını sunduğu için Git'in SSL sertifika doğrulaması başarısız olabilir.
Bunu çözmek için Git'i kurumsal kök CA sertifikasına güvenecek şekilde yapılandırın:
git config --global http.sslCAInfo /path/to/corporate/ca-cert.pem
Alternatif olarak — ve güvenlik riskleri nedeniyle üretim ortamlarında önerilmez — SSL doğrulaması kapatılabilir:
git config --global http.sslVerify false
Bu, sertifika doğrulamasını atlar ve bağlantıları gerçek man-in-the-middle saldırılarına açık hâle getirir. Yalnızca geçici hata ayıklama için veya kontrollü, izole ortamlarda kullanın.
Ortam değişkenleri
curl dâhil komut satırı araçları (Git HTTP/HTTPS aktarımlarında sıklıkla curl kullanır) genellikle HTTP_PROXY, HTTPS_PROXY ve NO_PROXY ortam değişkenlerine uyar. Bu değişkenler, uygulamaların devralabileceği sistem geneli veya oturum geneli bir proxy ayarı sağlar.
# For HTTP proxy
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080" # Often the same for HTTPS traffic tunneling
# For SOCKS proxy
export ALL_PROXY="socks5://proxy.example.com:1080"
# Exclude specific hosts from proxy
export NO_PROXY="localhost,127.0.0.1,*.internal.com"
Git'in kendi HTTP/HTTPS işlemlerinde http.proxy ve https.proxy yapılandırmalarının bu ortam değişkenlerine göre önceliği olduğunu unutmayın. Ortam değişkenleri, git config açıkça ayarlanmadığında veya Git ile etkileşen diğer araçlar için kullanışlıdır.
Karşılaştırma: git config ve ortam değişkenleri
| Özellik | git config http.proxy / https.proxy |
HTTP_PROXY / HTTPS_PROXY ortam değişkenleri |
|---|---|---|
| Kapsam | Git'e özgü (global veya depo bazında) | Bunlara uyan uygulamalar için sistem geneli veya oturum geneli |
| Öncelik | Git işlemlerinde daha yüksek; ortam değişkenlerini geçersiz kılar. | Git için daha düşük; yedek olarak veya diğer araçlar için işler. |
| Kalıcılık | Oturumlar arası kalıcı (.gitconfig veya .git/config içinde saklanır). |
Varsayılan olarak kalıcı değil; kalıcılık için shell profiline (.bashrc, .zshrc) eklenmesi gerekir. |
| Kimlik doğrulama | URL'de username:password@ destekler veya kimlik bilgilerini sorar. |
URL'de username:password@ destekler. |
| Esneklik | Git deposu bazında ayrıntılı denetim. | Değişkenlere uyan tüm uygulamalar üzerinde daha geniş etki. |
SSH Git proxy yapılandırması
ssh:// veya git@ URL'leriyle erişilen Git depolarında proxy kurulumu SSH istemci yapılandırmasıyla, özellikle ~/.ssh/config içindeki ProxyCommand yönergesiyle yönetilir. Standart HTTP/HTTPS proxy ayarları (örneğin http.proxy) SSH bağlantılarını etkilemez.
~/.ssh/config ile ProxyCommand kullanımı
ProxyCommand, SSH'a hedef host'a (%h) ve porta (%p) bağlantıyı önce harici bir komut — genellikle bir proxy istemcisi — üzerinden yönlendirerek kurmasını söyler.
Ön koşullar
netcat(nc): temel TCP tünelleme ve SOCKS proxy'ler için.corkscrewveyaconnect-proxy: kimlik doğrulama isteyen HTTP/HTTPS proxy'ler üzerinden SSH tünellemek için.
HTTP/HTTPS proxy tünelleme
Proxy'niz bir HTTP/HTTPS proxy ise corkscrew veya connect-proxy kullanabilirsiniz.
-
corkscrewveyaconnect-proxykurun (kurulu değilse).- Debian/Ubuntu'da:
sudo apt-get install corkscrew - macOS'ta (Homebrew ile):
brew install corkscrew connect-proxygeneldeopensshile birlikte gelir veya ayrıca temin edilebilir.
- Debian/Ubuntu'da:
-
~/.ssh/configdosyasını düzenleyin:
~/.ssh/configdosyasını şu içerikle oluşturun veya değiştirin:```ssh
Host github.com
ProxyCommand corkscrew proxy.example.com 8080 %h %p
# If proxy requires authentication:
# ProxyCommand corkscrew proxy.example.com 8080 %h %p /path/to/proxy_auth_fileHost gitlab.com
ProxyCommand corkscrew proxy.example.com 8080 %h %pOr for all hosts
Host *
ProxyCommand corkscrew proxy.example.com 8080 %h %p
``proxy.example.comve8080yerine kendi proxy adresinizi ve portunuzu yazın./path/to/proxy_auth_filedosyası tek satırdausername:passwordiçermelidir. Bu dosyanın kısıtlı izinlere sahip olmasını sağlayın (örneğinchmod 600`).
SOCKS proxy tünelleme
Proxy'niz bir SOCKS proxy ise netcat'i (nc) -X seçeneğiyle kullanın:
-
netcat'in kurulu olduğundan emin olun. Çoğu Unix benzeri sistemde genellikle önceden kuruludur. -
~/.ssh/configdosyasını düzenleyin:```ssh
Host github.com
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %pHost gitlab.com
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %pOr for all hosts
Host *
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %p
``proxy.example.comve1080yerine kendi SOCKS proxy adresinizi ve portunuzu yazın. *-X 5: SOCKS sürüm 5'i belirtir. SOCKS sürüm 4 için-X 4kullanın. *-x`: proxy adresini ve portunu belirtir.
SOCKS proxy için kimlik doğrulama
Bazı netcat sürümleri (Linux'ta çoğu zaman varsayılan olan OpenBSD nc) SOCKS proxy kimlik doğrulamasını destekler. Örneğin:
Host *
ProxyCommand nc -X 5 -x user:[email protected]:1080 %h %p
Kesin kimlik doğrulama sözdizimi ve yetenekler için netcat sürümünüzün man sayfasına bakın.
Proxy kurulumunu doğrulama
Proxy'yi yapılandırdıktan sonra Git işlemlerinin doğru yönlendirildiğini doğrulayın.
HTTP/HTTPS Git işlemleri için
Git yapılandırmanızı kontrol edin:
git config --global --get http.proxy
git config --global --get https.proxy
git config --global --get http.noProxy
Bir HTTPS deposunda git clone veya git fetch işlemi yapın:
git clone https://github.com/git/git.git
Proxy çalışıyorsa bağlantı başarılı olmalıdır. Ağ izleme araçları trafiğin yönlendirmesini doğrulayabilir.
SSH Git işlemleri için
SSH bağlantınızı ayrıntılı modda test edin:
ssh -vT [email protected]
Çıktıda ProxyCommand çalıştırıldığını gösteren satırı arayın. Örneğin:
debug1: Executing proxy command: exec corkscrew proxy.example.com 8080 github.com 22
Ardından bir Git işlemi deneyin:
git clone [email protected]:git/git.git
Sık karşılaşılan sorunların giderilmesi
- Yanlış proxy adresi veya portu: proxy sunucusunun IP adresini veya hostname'ini ve belirtilen portu iki kez kontrol edin.
- Kimlik doğrulama hatası: proxy kullanıcı adını ve parolasını doğrulayın.
git configiçin kimlik bilgilerinin doğru olduğundan veya bir credential helper yapılandırıldığından emin olun.ProxyCommandiçin kimlik doğrulama dosyasının ya da gömülü kimlik bilgilerinin doğru olduğunu kontrol edin. - SSL sertifika sorunları (
https://):SSL certificate problem: self signed certificate in certificate chainhataları alıyorsanız kurumsal proxy'niz SSL denetimi yapıyor olabilir.http.sslCAInfoayarını kurumsal kök CA sertifikanızla yapılandırın veya son çare olarak hata ayıklama amacıyla geçici olarakhttp.sslVerify falseayarlayın (üretim için önerilmez). - Güvenlik duvarı engelleri: yerel güvenlik duvarınızın (varsa) ve kurumsal güvenlik duvarının, belirtilen portta proxy sunucusuna giden bağlantılara izin verdiğinden emin olun. Proxy sunucusunun kendisi de Git barındırma servislerine bağlantıya izin vermelidir.
ProxyCommandyardımcı programı bulunamadı (ssh://):ProxyCommand"command not found" hatasıyla başarısız olursanetcat,corkscrewveyaconnect-proxy'nin kurulu olduğundan ve çalıştırılabilir dosya yolunun sisteminizinPATHortam değişkeninde bulunduğundan emin olun. Gerekirse çalıştırılabilir dosyanın tam yolunu belirtin (örneğinProxyCommand /usr/bin/corkscrew ...).- Proxy atlanıyor:
git configiçindekihttp.noProxyfazla geniş kapsamlıysa veya ortam değişkenleri yanlış ayarlanmışsa Git doğrudan bağlantı deneyebilir.noProxyayarlarını doğrulayın. - Proxy zaman aşımı: proxy'nin agresif zaman aşımı ayarları varsa uzun süren işlemler zaman aşımına uğrayabilir. Bu genellikle sunucu tarafı bir yapılandırma sorunudur.
