GitHub Windows-Client hinter dem Proxy

93

Ich versuche, den GitHub-Client für Windows zum Laufen zu bringen. Ich bin auf einem Win 7 x64-Firmencomputer hinter einem Firmenproxy und einer Firewall. Nach verschiedenen anderen Beiträgen und dem Experimentieren mit mehreren Kombinationen von Umgebungsvariablen und Konfigurationsvariablen habe ich die einzige Möglichkeit gefunden, Klonen und Push-Updates zum Laufen zu bringen, indem ich die Umgebungsvariable HTTPS_PROXY verwende, einschließlich meiner vollständigen Benutzer-ID und meines Kennworts für die Unternehmensdomäne.

Dies ist aus Sicherheitsgründen nicht akzeptabel. Gibt es eine andere Möglichkeit, dies zum Laufen zu bringen?

Zusätzliche Bemerkungen:

Folgendes hat funktioniert:

  • Fügen Sie eine Umgebungsvariable hinzu, die HTTPS_PROXYmit dem Wert aufgerufen wirdhttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Folgendes hat nicht funktioniert:

  • Auslassen der Benutzer-ID und des Kennworts aus der HTTPS_PROXYVariablen
  • Verwenden einer Umgebungsvariablen namens HTTP_PROXY(no S)
  • Hinzufügen der http.proxyVariablen zur globalen Konfigurationsdatei (.gitconfig )
  • Hinzufügen der https.proxyVariablen zur globalen Konfigurationsdatei

In allen Fällen erkennt der GitHub- Client den Proxy immer noch nicht: Der Inhalt der Datei zeigt beim Start TheLog.txt immer Folgendes an:

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

Anschließend werden mehrere fehlgeschlagene Proxy-Authentifizierungsversuche ausgegeben, die alle darauf hinweisen, dass "Anmeldeinformationen fehlen".

Joshua Honig
quelle
2
Das Hinzufügen der Umgebungsvariablen hat den Trick für mich getan, ist jedoch eine inakzeptable Lösung, da meine Domäne / mein Kennwort jeder Anwendung mit Zugriff auf die Umgebungsvariablen zugänglich gemacht wird.
Fabricio
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs erklärt, dass dies dadurch verursacht wird, dass die GUI (die den Windows-Set-Proxy korrekt verwendet) hinter den Kulissen msysgit für die git-Befehle aufruft. msysgit verwendet libcurl für http-Anforderungen, wobei die Windows-Proxyeinstellungen nicht verwendet werden. In mehreren Bereichen wird daran gearbeitet, dies zu beheben, unter anderem mit libgit2sharp unter github.com/libgit2/libgit2sharp .
Andrew Hill

Antworten:

131

Fügen Sie diese Einträge zu Ihrer '.gitconfig'-Datei in Ihrem Benutzerverzeichnis hinzu (gehen Sie zu% USERPROFILE%):

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

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

Und wenn Sie Ihr Passwort nicht im Klartext speichern möchten, würde ich einen lokalen Proxy-Forwarder wie CNTLM verwenden, mit dem Sie den gesamten Datenverkehr durch das Passwort leiten und die gehashten Passwörter speichern können.


Wenn es Ihnen egal ist, ob Ihr Passwort im Klartext vorliegt, fügen Sie im Gegensatz zur ursprünglichen Frage Folgendes hinzu:

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

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
quelle
Siehe edufinn Antwort, wenn Sie eine Autorisierung für den Proxy benötigen: proxy = http: // <Benutzername>: <Kennwort> @ <Personalproxy>: <Port>
Jan Hommes
1
@ JanHommes Die ursprüngliche Frage war speziell gefragt, wie es geht, ohne das Passwort im Klartext zu speichern
Sogger
@Sogger Wenn mein Passwort das Zeichen "@" enthält, wie soll ich das Passwort konfigurieren, danke für Ihre Hilfe.
Küste
4
Wenn Sie CNTLM verwenden, stellen Sie sicher, dass Sie den Proxy wie vorgeschlagen auf 127.0.0.1anstatt verweisen localhost. In Windows scheint localhost zuerst auf die IPv6-Adresse zu verweisen, die CNTLM nicht abhört. Daher wartet git bis zum Timeout (einige Minuten), bevor es zur IPv4-Adresse wechselt.
Ronan Paixão
14

Ich habe alles oben Genannte versucht - und es ist mir nicht gelungen. Das einzige, was mir geholfen hat, ist CNTLM - http://cntlm.sourceforge.net/ .

Installieren Sie es und führen Sie cntlm -H aus. Authentifizieren Sie sich dann beim Corp-Proxy, bearbeiten Sie die Datei cntlm.ini mit der Ausgabe von cntlm und starten Sie den Windows-Dienst neu. Aktualisieren Sie .gitconfig mit:

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

Jetzt führt cntlm die gesamte Authentifizierung durch und Sie können GitHub (und übrigens Dropbox) hinter dem Corp-Proxy verwenden. Zumindest bis zur nächsten Passwortänderung :) (dann mach nochmal cntlm -H Zeug)

Anton
quelle
2
Wenn Remote-Aktionen wie das Klonen, Abrufen oder Ziehen von Git sehr lange dauern, versuchen Sie, die .gitconfig auf Folgendes umzuschalten: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
Neustart welchen Windows-Dienst?
Mukus
@ Mukus cntlm - läuft nach der Installation im Servicemodus, wenn ich mich richtig erinnere.
Anton
Ich habe die Änderung vorgenommen, neu gestartet und sie funktioniert immer noch nicht.
Mukus
8

Ich konnte GitHub Shell dazu bringen, mit unserem Corporate Proxy zusammenzuarbeiten. Ich starte die GitHub Shell und führe folgenden Befehl aus:

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

Ich möchte wirklich, dass die GUI auch funktioniert. Ich möchte jedoch keine globale Windows-Umgebungsvariable festlegen, die meine Anmeldeinformationen enthält.

Seltsamerweise kann der GitHub-GUI-Client zur Benutzerauthentifizierung eine Verbindung zu GitHub herstellen. Das einzige Problem besteht jedoch darin, Projekte von und in GitHub zu klonen, abzurufen und zu verschieben. Es scheint, dass das Problem bei der Implementierung von Git liegt. Ich konnte git so konfigurieren, dass es über unseren Proxy ausgeführt wird, ohne meine Anmeldeinformationen in die globalen Einstellungen von git aufzunehmen, und es wurden meine Anmeldeinformationen abgefragt, während Pull- oder Push-Anforderungen ausgeführt wurden. Aber das funktionierte nur in Git Shell.

edufinn
quelle
Dies liegt daran, dass GitHub sich wahrscheinlich intern mit einer Komponente authentifiziert, die Proxy-Informationen vom Betriebssystem abruft, möglicherweise mit einer SingleSignOn-Lösung, während Git selbst dies nicht tut. Ich habe das gleiche Problem mit SourceTree. Ich fand auch heraus, dass es unglaublich lange dauert, bis Git funktioniert, was die Verwendung von SourceTree unmöglich macht.
Ronan Paixão
Dies ist wahrscheinlich, weil Github versucht, den Git-Port zu verwenden, der normalerweise gefiltert wird, da er für IT-Mitarbeiter nicht üblich ist. Siehe meine Antwort für eine Alternative.
Dragon788
7

Wenn Sie GitHub für Windows in einem Unternehmen verwenden, stehen die Chancen gut, dass Sie hinter einer großen, schlechten Unternehmens-Firewall / Proxy stehen. GitHub für Windows verfügt noch nicht über die Proxy-Parameter in seiner GUI zum Festlegen von Optionen.

Um GitHub für Windows für die Verwendung Ihres Unternehmensproxys zu konfigurieren, bearbeiten Sie die .gitconfig-Datei, die normalerweise unter C: \ Users \ .gitconfig oder C: \ Documents & Settings \ .gitconfig zu finden ist

Schließen Sie GitHub für Windows. Fügen Sie in .gitconfig einfach hinzu

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

Manivannan
quelle
4

Ich bin auch auf dieses Problem gestoßen und habe versucht, mich auch ein wenig damit zu beschäftigen (zerlegte den Client).

Der Code, der die angezeigten Protokollnachrichten generiert, lautet wie folgt:

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);
    }
}

Dieser Block protokolliert also nur die Proxy-Informationen, die im IE eingerichtet wurden . Die Protokollmeldung scheint keinen Einfluss darauf zu haben, was wir in den Konfigurationsdateien oder Umgebungsvariablen eingerichtet haben.

DustinTheDev
quelle
3

Ich weiß nichts über Ihre Firewall, aber mein Campus verwendet Proxy

Benutzt du eine Git Gui? BEARBEITEN : Ich habe gerade bemerkt, dass Sie den Github-Client für Windows verwenden

Ich benutze Tortoisegit und es ist sehr einfach, den Proxy zu setzen. Klicken Sie einfach mit der rechten Maustaste auf eine beliebige Stelle, tortoisegit> network, aktivieren Sie den Proxyserver und legen Sie die Serveradresse, den Benutzernamen und das Kennwort fest. getan

Soweit ich mich erinnere, wird Tortoisegit auch mit Github sofort funktionieren.

bysreg
quelle
2

Hier ist der Weg, um Proxy in Github zu setzen

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

Hier in meinem College haben wir keinen Benutzernamen und kein Passwort. Wenn also unsere College-IP 172.16.10.10 und der Port 8080 ist

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

PS -> Ich würde empfehlen, diese Methode zu verwenden, um den Proxy festzulegen, da die Dinge zusammenfallen, wenn Sie weitere
Informationen zu Source erhalten

Royatirek
quelle
1

Ich fand diesen Blog nützlich. Es beschreibt den ntlmaps- Proxy. Es ist wahrscheinlich weniger sicher, hat aber reibungslos funktioniert. Ich konnte cntlm nicht zum Laufen bringen.

Aksakal fast sicher binär
quelle
1

Für uns umfasste die Lösung zwei verschiedene Dinge. Zunächst müssen Sie, wie in Soggers Antwort beschrieben, die Einträge zu Ihrer .gitconfigDatei hinzufügen , die sich in befindet %USERPROFILE%.

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

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

Zweitens (und dies war das fehlende Teil für uns) müssen Sie eine Ausnahme auf dem Proxyserver konfigurieren, damit nicht authentifizierter Proxy-Verkehr zugelassen wird*.github.com

In iPrism sieht es so aus: Geben Sie hier die Bildbeschreibung ein

Das Problem ist nicht so sehr der Proxy, sondern die Authentifizierung . Durch Umgehen der Authentifizierungsanforderung kann die erforderliche Kommunikation mithilfe des GitHub-Desktop-Clients geklont und mit Projekten bearbeitet werden.

Beachten Sie außerdem, dass für diesen Ansatz keine Proxy-Anmeldeinformationen in der .gitconfigDatei gespeichert werden mussten.

AdamsTipps
quelle