Die Git-Proxy-Einrichtung umfasst die Konfiguration der http.proxy- und https.proxy-Einstellungen von Git, die Nutzung von Umgebungsvariablen wie HTTP_PROXY und HTTPS_PROXY oder die Verwendung von ProxyCommand in SSH-Konfigurationen für SSH-basierte Git-Operationen, um den Datenverkehr über einen Vermittlungsserver zu leiten.
Git-Proxy-Anforderungen verstehen
Unternehmensfirewalls, Netzwerksicherheitsrichtlinien oder eingeschränkter Internetzugang erfordern oft, den Git-Datenverkehr über einen Proxyserver zu leiten. Dies gilt für Operationen wie git clone, git fetch, git pull und git push. Die Konfigurationsmethode hängt vom Git-URL-Protokoll ab: https:// (oder http://) verwendet HTTP/HTTPS-Proxys, während ssh:// (oder git@) SSH-spezifische Proxy-Methoden verwendet.
HTTP/HTTPS Git-Proxy-Konfiguration
Für Git-Repositories, auf die über https://- oder http://-URLs zugegriffen wird, verwendet Git HTTP/HTTPS-Proxy-Einstellungen.
Git-Konfigurationsmethode (git config)
Dies ist die empfohlene Methode zur Konfiguration von HTTP/HTTPS-Proxys für Git. Die Einstellungen können global (für alle Repositories) oder spezifisch für ein einzelnes Repository sein.
Globale Konfiguration
Um einen Proxy global für alle Git-Repositories auf einem System zu konfigurieren:
# Für HTTP-Proxy (z.B. für https://github.com URLs über einen HTTP-Proxy)
git config --global http.proxy http://proxy.example.com:8080
# Für HTTPS-Proxy (z.B. für https://github.com URLs über einen HTTPS-Proxy)
# Hinweis: Oft wird ein HTTPS-Proxy ähnlich wie ein HTTP-Proxy konfiguriert,
# aber der Datenverkehr wird explizit getunnelt.
git config --global https.proxy http://proxy.example.com:8080
Wenn der Proxy eine Authentifizierung erfordert:
git config --global http.proxy http://username:password@proxy.example.com:8080
git config --global https.proxy http://username:password@proxy.example.com:8080
Aus Sicherheitsgründen kann Git, anstatt das Passwort direkt in die URL einzubetten, zur Eingabe von Anmeldeinformationen auffordern oder diese von einem Anmeldeinformationshelfer abrufen. Das Weglassen des Passworts führt dazu, dass Git danach fragt.
Pro-Repository-Konfiguration
Um einen Proxy für ein bestimmtes Repository zu konfigurieren, navigieren Sie in das Stammverzeichnis des Repositorys und lassen Sie das --global-Flag weg:
cd /path/to/my/repo
git config http.proxy http://proxy.example.com:8080
git config https.proxy http://proxy.example.com:8080
Diese Einstellungen werden in der .git/config-Datei dieses Repositorys gespeichert.
Proxy für bestimmte Hosts deaktivieren
Um den Proxy für bestimmte Domains (z.B. interne Git-Server) zu umgehen, verwenden Sie http.noProxy:
git config --global http.noProxy "localhost,127.0.0.1,*.internal.com"
Mehrere Hosts können durch Kommas getrennt werden.
SSL-Zertifikatsprüfung
In Unternehmensumgebungen, die transparente oder abfangende Proxys (MITM-Proxys) verwenden, kann die SSL-Zertifikatsprüfung von Git fehlschlagen, da der Proxy sein eigenes Zertifikat anstelle des des Ursprungsservers präsentiert.
Um dies zu beheben, konfigurieren Sie Git so, dass es dem Unternehmens-Root-CA-Zertifikat vertraut:
git config --global http.sslCAInfo /path/to/corporate/ca-cert.pem
Alternativ, und nicht empfohlen für Produktionsumgebungen aufgrund von Sicherheitsrisiken, kann die SSL-Verifizierung deaktiviert werden:
git config --global http.sslVerify false
Dies umgeht die Zertifikatsvalidierung und macht Verbindungen anfällig für tatsächliche Man-in-the-Middle-Angriffe. Verwenden Sie dies nur für temporäres Debugging oder in kontrollierten, isolierten Umgebungen.
Umgebungsvariablen
Befehlszeilentools, einschließlich curl (das Git oft für HTTP/HTTPS-Übertragungen verwendet), respektieren typischerweise die Umgebungsvariablen HTTP_PROXY, HTTPS_PROXY und NO_PROXY. Diese Variablen bieten eine systemweite oder sitzungsweite Proxy-Einstellung, die Anwendungen erben können.
# Für HTTP-Proxy
export HTTP_PROXY="http://proxy.example.com:8080"
export HTTPS_PROXY="http://proxy.example.com:8080" # Oft dasselbe für HTTPS-Datenverkehrstunneling
# Für SOCKS-Proxy
export ALL_PROXY="socks5://proxy.example.com:1080"
# Bestimmte Hosts vom Proxy ausschließen
export NO_PROXY="localhost,127.0.0.1,*.internal.com"
Beachten Sie, dass die http.proxy- und https.proxy-Konfigurationen von Git Vorrang vor diesen Umgebungsvariablen für die eigenen HTTP/HTTPS-Operationen von Git haben. Umgebungsvariablen sind nützlich, wenn git config nicht explizit gesetzt ist, oder für andere Tools, die mit Git interagieren.
Vergleich: git config vs. Umgebungsvariablen
| Feature | git config http.proxy / https.proxy |
HTTP_PROXY / HTTPS_PROXY Umgebungsvariablen |
|---|---|---|
| Geltungsbereich | Git-spezifisch (global oder pro-Repository) | Systemweit oder sitzungsweit für Anwendungen, die sie respektieren |
| Vorrang | Höher für Git-Operationen; überschreibt Umgebungsvariablen. | Niedriger für Git; dient als Fallback oder für andere Tools. |
| Persistenz | Persistent über Sitzungen hinweg (gespeichert in .gitconfig oder .git/config). |
Standardmäßig nicht persistent; erfordert das Hinzufügen zum Shell-Profil (.bashrc, .zshrc) für Persistenz. |
| Authentifizierung | Unterstützt username:password@ in der URL oder fordert Anmeldeinformationen an. |
Unterstützt username:password@ in der URL. |
| Flexibilität | Granulare Kontrolle pro Git-Repository. | Breitere Auswirkungen auf alle Anwendungen, die die Variablen respektieren. |
SSH Git-Proxy-Konfiguration
Für Git-Repositories, auf die über ssh://- oder git@-URLs zugegriffen wird, wird die Proxy-Einrichtung über die SSH-Client-Konfiguration verwaltet, insbesondere unter Verwendung der ProxyCommand-Direktive in ~/.ssh/config. Standard-HTTP/HTTPS-Proxy-Einstellungen (z.B. http.proxy) beeinflussen SSH-Verbindungen nicht.
Verwendung von ~/.ssh/config mit ProxyCommand
Der ProxyCommand weist SSH an, eine Verbindung zum Zielhost (%h) und Port (%p) herzustellen, indem er diese zuerst über einen externen Befehl, typischerweise einen Proxy-Client, leitet.
Voraussetzungen
netcat(nc): Für grundlegendes TCP-Tunneling und SOCKS-Proxys.corkscrewoderconnect-proxy: Zum Tunneln von SSH durch HTTP/HTTPS-Proxys, die eine Authentifizierung erfordern.
HTTP/HTTPS-Proxy-Tunneling
Wenn Ihr Proxy ein HTTP/HTTPS-Proxy ist, können Sie corkscrew oder connect-proxy verwenden.
-
Installieren Sie
corkscrewoderconnect-proxy(falls noch nicht vorhanden).- Unter Debian/Ubuntu:
sudo apt-get install corkscrew - Unter macOS (mit Homebrew):
brew install corkscrew connect-proxyist oft Teil vonopensshoder separat erhältlich.
- Unter Debian/Ubuntu:
-
Bearbeiten Sie
~/.ssh/config:
Erstellen oder ändern Sie~/.ssh/configwie folgt:```ssh
Host github.com
ProxyCommand corkscrew proxy.example.com 8080 %h %p
# Wenn der Proxy eine Authentifizierung erfordert:
# ProxyCommand corkscrew proxy.example.com 8080 %h %p /path/to/proxy_auth_fileHost gitlab.com
ProxyCommand corkscrew proxy.example.com 8080 %h %pOder für alle Hosts
Host *
ProxyCommand corkscrew proxy.example.com 8080 %h %p
`` Ersetzen Sieproxy.example.comund8080durch die Adresse und den Port Ihres Proxys. Die Datei/path/to/proxy_auth_filesollteusername:passwordin einer einzigen Zeile enthalten. Stellen Sie sicher, dass diese Datei restriktive Berechtigungen hat (z.B.chmod 600`).
SOCKS-Proxy-Tunneling
Wenn Ihr Proxy ein SOCKS-Proxy ist, verwenden Sie netcat (nc) mit der Option -X:
-
Stellen Sie sicher, dass
netcatinstalliert ist. Es ist normalerweise auf den meisten Unix-ähnlichen Systemen vorinstalliert. -
Bearbeiten Sie
~/.ssh/config:```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 %pOder für alle Hosts
Host *
ProxyCommand nc -X 5 -x proxy.example.com:1080 %h %p
`` Ersetzen Sieproxy.example.comund1080durch die Adresse und den Port Ihres SOCKS-Proxys. *-X 5: Spezifiziert SOCKS-Version 5. Verwenden Sie-X 4für SOCKS-Version 4. *-x`: Spezifiziert die Proxy-Adresse und den Port.
Authentifizierung für SOCKS-Proxy
Einige netcat-Versionen (nc von OpenBSD, oft Standard unter Linux) unterstützen die SOCKS-Proxy-Authentifizierung. Zum Beispiel:
Host *
ProxyCommand nc -X 5 -x user:password@proxy.example.com:1080 %h %p
Konsultieren Sie die Manpage Ihrer netcat-Version für spezifische Authentifizierungssyntax und -funktionen.
Proxy-Einrichtung überprüfen
Nach der Konfiguration des Proxys überprüfen Sie, ob die Git-Operationen korrekt geleitet werden.
Für HTTP/HTTPS Git-Operationen
Überprüfen Sie Ihre Git-Konfiguration:
git config --global --get http.proxy
git config --global --get https.proxy
git config --global --get http.noProxy
Führen Sie einen git clone- oder git fetch-Vorgang für ein HTTPS-Repository aus:
git clone https://github.com/git/git.git
Wenn der Proxy funktioniert, sollte die Verbindung erfolgreich sein. Netzwerküberwachungstools können die Datenverkehrsleitung bestätigen.
Für SSH Git-Operationen
Testen Sie Ihre SSH-Verbindung ausführlich:
ssh -vT git@github.com
Suchen Sie nach einer Ausgabe, die die Ausführung von ProxyCommand anzeigt. Zum Beispiel:
debug1: Executing proxy command: exec corkscrew proxy.example.com 8080 github.com 22
Versuchen Sie dann eine Git-Operation:
git clone git@github.com:git/git.git
Häufige Probleme beheben
- Falsche Proxy-Adresse oder Port: Überprüfen Sie nochmals die IP-Adresse oder den Hostnamen des Proxyservers und den vorgesehenen Port.
- Authentifizierungsfehler: Überprüfen Sie Benutzername und Passwort des Proxys. Stellen Sie für
git configsicher, dass die Anmeldeinformationen korrekt sind oder ein Anmeldeinformationshelfer konfiguriert ist. Stellen Sie fürProxyCommandsicher, dass die Authentifizierungsdatei oder die eingebetteten Anmeldeinformationen korrekt sind. - SSL-Zertifikatsprobleme (
https://): Wenn Sie Fehler wieSSL certificate problem: self signed certificate in certificate chainerhalten, führt Ihr Unternehmensproxy möglicherweise eine SSL-Inspektion durch. Konfigurieren Siehttp.sslCAInfomit Ihrem Unternehmens-Root-CA-Zertifikat, oder setzen Sie, als letzten Ausweg, temporärhttp.sslVerify falsezum Debuggen (nicht empfohlen für die Produktion). - Firewall-Blockaden: Stellen Sie sicher, dass Ihre lokale Firewall (falls vorhanden) und die Unternehmensfirewall ausgehende Verbindungen zum Proxyserver auf dem angegebenen Port zulassen. Der Proxyserver selbst muss auch Verbindungen zu Git-Hosting-Diensten zulassen.
ProxyCommand-Helfer nicht gefunden (ssh://): WennProxyCommandmit "command not found" fehlschlägt, stellen Sie sicher, dassnetcat,corkscrewoderconnect-proxyinstalliert ist und sein ausführbarer Pfad in derPATH-Umgebungsvariablen Ihres Systems enthalten ist. Geben Sie bei Bedarf den vollständigen Pfad zur ausführbaren Datei an (z.B.ProxyCommand /usr/bin/corkscrew ...).- Proxy umgangen: Wenn
git confighttp.noProxyzu breit ist oder wenn Umgebungsvariablen falsch gesetzt sind, versucht Git möglicherweise eine direkte Verbindung. Überprüfen Sie dienoProxy-Einstellungen. - Proxy-Timeout: Lang laufende Operationen können ein Timeout verursachen, wenn der Proxy aggressive Timeout-Einstellungen hat. Dies ist normalerweise ein serverseitiges Konfigurationsproblem.