Klient GitHub dla systemu Windows za proxy

93

Próbuję uruchomić klienta GitHub dla systemu Windows. Jestem na firmowym komputerze z systemem Windows 7 x64 za firmowym serwerem proxy i zaporą. Śledząc różne inne posty i eksperymentując z wieloma kombinacjami zmiennych środowiskowych i zmiennych konfiguracyjnych, odkryłem, że jedynym sposobem, aby klonowanie i wypychanie aktualizacji działało, jest użycie zmiennej środowiskowej HTTPS_PROXY, w tym mojego pełnego identyfikatora użytkownika i hasła domeny firmowej.

Jest to niedopuszczalne z punktu widzenia bezpieczeństwa. Czy jest jakiś inny sposób, aby to zadziałało?

Dodatkowe uwagi:

Następujące działały:

  • Dodaj zmienną środowiskową wywoływaną HTTPS_PROXYz wartościąhttp://[domain]\[userid]:[password]@someproxy.mycorp.com:8080

Nie udało się :

  • Pomijanie identyfikatora użytkownika i hasła w HTTPS_PROXYzmiennej
  • Używanie zmiennej środowiskowej o nazwie HTTP_PROXY(nie S)
  • Dodanie http.proxyzmiennej do globalnego pliku konfiguracyjnego ( .gitconfig)
  • Dodanie https.proxyzmiennej do globalnego pliku konfiguracyjnego

We wszystkich przypadkach klient GitHub nadal nie rozpoznaje serwera proxy: Zawartość pliku TheLog.txt zawsze zawiera następujące informacje podczas uruchamiania:

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

Po nim następuje kilka nieudanych prób uwierzytelnienia serwera proxy, z których wszystkie wskazują „Brak poświadczeń”.

Joshua Honig
źródło
2
Dodanie zmiennej środowiskowej załatwiło sprawę, ale jest to niedopuszczalne rozwiązanie, ponieważ ujawnia moją domenę / hasło każdej aplikacji mającej dostęp do zmiennych środowiskowych.
Fabricio,
jacobbenson.com/?p=302#sthash.DzPYdGUU.dpbs wyjaśnia, że ​​jest to spowodowane przez GUI (który poprawnie używa serwera proxy w systemie Windows) wywołuje za kulisami msysgit dla poleceń git. msysgit używa biblioteki libcurl do żądań http, które nie używają ustawień proxy systemu Windows. Trwają prace nad rozwiązaniem tego problemu w kilku obszarach, w tym w bibliotece libgit2sharp pod adresem github.com/libgit2/libgit2sharp .
Andrew Hill

Odpowiedzi:

131

Dodaj te wpisy do pliku „.gitconfig” w katalogu użytkownika (przejdź do% USERPROFILE%):

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

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

A jeśli nie chcesz przechowywać hasła w postaci zwykłego tekstu, użyłbym lokalnego przekazującego proxy, takiego jak CNTLM, który umożliwia kierowanie całego ruchu przez niego i może przechowywać zaszyfrowane hasła.


W przeciwieństwie do pierwotnego pytania, jeśli nie obchodzi Cię, czy hasło jest w postaci zwykłego tekstu, dodaj następujące:

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

[https]
    proxy = https://<username>:<password>@<proxy address>:<proxy port>
Sogger
źródło
zobacz odpowiedź edufinn, jeśli potrzebujesz autoryzacji w stosunku do proxy: proxy = http: // <nazwa użytkownika>: <hasło> @ <korporacyjny proxy>: <port>
Jan Hommes
1
@JanHommes Pierwotne pytanie dotyczyło konkretnie tego, jak to zrobić bez przechowywania hasła w postaci zwykłego tekstu
Sogger
@Sogger Jeśli moje hasło zawiera znak „@”, jak mam skonfigurować hasło, dziękuję za pomoc.
linia brzegowa
4
Jeśli używasz CNTLM, upewnij się, że wskazałeś proxy 127.0.0.1zamiast localhost, jak sugerowano. W systemie Windows wydaje się, że localhost wskazuje najpierw adres IPv6, którego CNTLM nie nasłuchuje. W związku z tym git będzie czekał do upływu limitu czasu (kilka minut) przed przełączeniem na adres IPv4.
Ronan Paixão
14

Wypróbowałem wszystko powyżej - i nie udało mi się, jedyną rzeczą, która mi pomogła, jest CNTLM - http://cntlm.sourceforge.net/ .

Zainstaluj go i uruchom cntlm -H, następnie uwierzytelnij się w korporacyjnym proxy, edytuj plik cntlm.ini z wyjściem cntlm, zrestartuj usługę Windows. Zaktualizuj plik .gitconfig za pomocą:

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

Teraz cntlm wykona całe uwierzytelnienie, a będziesz mógł korzystać z GitHub (i Dropbox, btw) za korporacyjnym proxy. Przynajmniej do kolejnej zmiany hasła :) (potem znowu cntlm -H)

Anton
źródło
2
Jeśli zdalne czynności, takie jak klonowanie git, pobieranie lub ściąganie, trwają bardzo długo, spróbuj przełączyć plik .gitconfig na: [https] proxy = 127.0.0.1:3128 [http] proxy = 127.0.0.1:3128
jhamm
uruchom ponownie jaką usługę Windows?
Mukus,
@Mukus cntlm - po instalacji działa w trybie serwisowym, o ile dobrze pamiętam.
Anton,
Dokonałem zmiany, zrestartowałem i dalej nie działa.
Mukus,
8

Udało mi się zmusić GitHub Shell do współpracy z naszym korporacyjnym proxy. Uruchamiam GitHub Shell i wykonuję następujące polecenie:

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

Naprawdę chciałbym, aby GUI też działało. Ale nie chcę ustawiać globalnej zmiennej środowiskowej systemu Windows, która zawiera moje firmowe dane uwierzytelniające.

O dziwo klient GitHub GUI jest w stanie połączyć się z GitHubem w celu uwierzytelnienia użytkownika, ale jedynym problemem jest klonowanie, ściąganie i wypychanie projektów zi do GitHub. Wygląda na to, że problem tkwi w implementacji gita. Udało mi się skonfigurować git, aby działał przez nasz serwer proxy bez umieszczania moich poświadczeń w ustawieniach globalnych git i pytał o moje poświadczenia podczas wykonywania żądań ściągania lub wypychania. Ale to działało tylko w Git Shell.

edufinn
źródło
Dzieje się tak, ponieważ prawdopodobnie GitHub uwierzytelnia się wewnętrznie za pomocą jakiegoś komponentu, który pobiera informacje o serwerze proxy z systemu operacyjnego, być może jakieś rozwiązanie SingleSignOn, podczas gdy sam git nie. Mam ten sam problem z SourceTree. Odkryłem również, że gdy działa git, jego działanie zajmuje niewiarygodnie dużo czasu, co uniemożliwia korzystanie z SourceTree.
Ronan Paixão
Jest to prawdopodobne, ponieważ Github próbuje użyć portu git, który jest zwykle filtrowany, ponieważ nie jest typowy dla informatyków. Zobacz moją odpowiedź na alternatywę.
dragon788
7

Jeśli używasz GitHub dla Windows w firmie, istnieje duże prawdopodobieństwo, że stoisz za wielką, złą korporacyjną zaporą ogniową / serwerem proxy. GitHub dla systemu Windows nie ma jeszcze parametrów proxy w swoim GUI do ustawiania opcji.

Aby skonfigurować usługę GitHub dla systemu Windows do korzystania z firmowego serwera proxy, edytuj plik .gitconfig, który zwykle znajduje się w C: \ Users \ .gitconfig lub C: \ Documents & Settings \ .gitconfig

Zamknij GitHub dla Windows; W .gitconfig po prostu dodaj

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

Manivannan
źródło
4

Natknąłem się również na ten problem i również próbowałem go trochę zagłębić (zdemontowałem klienta).

Fragment kodu, który generuje komunikaty dziennika, które widzimy, wygląda następująco:

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

Więc ten blok rejestruje tylko informacje o serwerze proxy skonfigurowane w IE . Wydaje się, że komunikat dziennika nie ma wpływu na to, co ustawiliśmy w plikach konfiguracyjnych lub zmiennych środowiskowych.

DustinTheDev
źródło
3

Nie wiem o twojej zaporze, ale mój kampus używa proxy

czy używasz jakiegoś git gui? EDYTOWAĆ : właśnie zauważyłem, że używasz klienta github dla Windows

używam Tortoisegit i bardzo łatwo jest ustawić proxy. Kliknij prawym przyciskiem myszy w dowolnym miejscu, tortoisegit> sieć, włącz serwer proxy i ustaw adres serwera, nazwę użytkownika i hasło. Gotowe

O ile pamiętam, tortoisegit będzie również działał po wyjęciu z pudełka z githubem.

bysreg
źródło
2

Oto sposób na ustawienie proxy w githubie

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

Tutaj w mojej uczelni nie mamy nazwy użytkownika i hasła, więc jeśli nasz adres IP uczelni to 172.16.10.10, a port to 8080

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

PS -> Zalecałbym użycie tej metody do ustawienia proxy, ponieważ wszystko będzie dobrze, gdy dowiesz się więcej o
źródle

royatirek
źródło
1

Ten blog okazał się przydatny. Opisuje proxy ntlmaps . Prawdopodobnie jest mniej bezpieczny, ale działał płynnie. Nie mogłem uruchomić cntlm.

Aksakal prawie na pewno binarny
źródło
1

Dla nas rozwiązanie obejmowało dwie różne rzeczy. Najpierw, jak opisano w odpowiedzi Soggera, musisz dodać wpisy do swojego .gitconfigpliku, znajdującego się w %USERPROFILE%.

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

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

Po drugie (i to był dla nas brakujący element), musisz skonfigurować wyjątek na serwerze proxy, aby zezwolić nieuwierzytelnionemu ruchowi proxy na*.github.com

W iPrism wygląda to tak: wprowadź opis obrazu tutaj

Problemem jest nie tyle proxy, co uwierzytelnianie . Pomijanie wymogu uwierzytelniania umożliwia niezbędną komunikację do klonowania i pracy z projektami przy użyciu klienta pulpitu GitHub.

Należy również zauważyć, że to podejście nie wymagało przechowywania poświadczeń proxy w .gitconfigpliku.

Porady Adams
źródło