2013-03-01 8 views
8

jestem za firmowej serwera proxy, który jest dość irytujące:Jak sklonować z github zza proxy korporacyjnej

  1. Rzeczywisty adres proxy używany jest określona przez skrypt
  2. To wymaga uwierzytelnienia
  3. To zastępuje certyfikaty stron internetowych przy użyciu HTTPS

Jak skutecznie sklonować repozytorium github w tym scenariuszu?

Odpowiedz

10
  1. Pierwszy problem nie jest tak naprawdę związany z git - bardziej jest to konieczne, aby móc faktycznie skonfigurować proxy.
    Konfigurację proxy na komputerze z systemem Windows można znaleźć w Panelu sterowania -> Opcje internetowe -> Połączenia -> Ustawienia sieci LAN.
    Jeśli zaznaczone jest "Użyj automatycznego skryptu konfiguracyjnego", najpierw musisz pobrać określony plik i go otworzyć. Mam plik zawierający mały skrypt. Wyglądało to mniej więcej tak:

    function FindProxyForURL(url, host) 
    { 
        var myip = myIpAddress(); 
        var hostip = dnsResolve(host); 
        if (isInNet(hostip,"192.168.0.0","255.255.0.0")) 
         return "DIRECT"; 
        if (isInNet(hostip,"xyz.abc.0.0","255.255.0.0")) 
         return PROXY special-proxy:8080; 
        return "PROXY default-proxy:8080"; 
    } 
    

    Tak, w moim przypadku, pełnomocnik do użytku był default-proxy:8080.

  2. Aby faktycznie dostać git używać proxy, musiałem użyć git config --global http.proxy http://<domain>\<username>:<password>@default-proxy:8080.

    Oczywistym minusem jest to, że hasło do domeny będzie przechowywane jako zwykły tekst na dysku twardym.

    Inne ustawienia nie działają, chociaż różne źródła twierdzą, że powinny. Były to:

    1. Ustawianie zmiennych środowiskowych https_proxy lub http_proxy do http://<domain>\<username>:<password>@default-proxy:8080
    2. Ustawianie globalnego git config do tej wartości: git config --global https.proxy http://<domain>\<username>:<password>@default-proxy:8080
    3. Ustawienie zmiennej środowiskowej http_proxy do http://<domain>\<username>:<password>@default-proxy:8080
  3. Aby dostać wokół trzeciego wydania najprostszą możliwością jest zignorowanie błędów certyfikatu poprzez ustawienie zmiennej środowiskowej - certyfikatów zwracane przez pełnomocnika nie są nic warte i tak:

    set GIT_SSL_NO_VERIFY=true 
    

Aby nie przechowuje hasła w postaci zwykłego git config, można korzystać z lokalnego serwera proxy zamiast, na przykład cntlm.

Pozwala to na zachowanie skrótu hasła. Aby uzyskać skrót, użyj polecenia:

cntlm.exe -H -d <domain> -u <username> 

Po tym czasie zostaniesz poproszony o podanie hasła. Wynikiem będzie lista trzech skrótów, z których najprawdopodobniej jest odpowiedni w tym scenariuszu. Zamień linię Password w pliku cntlm.ini na linię z wyjścia, w tym część PassNTLMv2.

Oczywiście należy skonfigurować git, aby zamiast tego używać lokalnego serwera proxy.

+0

+1, dzięki za udostępnienie! – CharlesB

+0

Dziękujemy, to jedyne rozwiązanie, które zadziałało! Nie wiedziałem, że skrypt automatycznej konfiguracji zostanie pobrany jako plik. Jedna rzecz, o której powinienem wspomnieć - jeśli znak skrótu (#) pojawi się w dowolnym miejscu w : to nie zadziała, ponieważ git zinterpretuje wszystko obok niej jako komentarz. – Boris

1

Jeśli chcesz również uzyskać prawo do zapisu na github, będziesz musiał uzyskać dostęp ssh do github przez serwer proxy. Aby to zrobić, możesz użyć corkscrew.

W skrócie jest to, w jaki sposób to zrobić:
Najpierw rozpakuj corkscrew
Następnie należy utworzyć plik w ~/.ssh/proxy_auth który zawiera <proxy_username>:<proxy_password>
teraz powiedzieć ssh korzystać korkociąg, aby uzyskać dostęp github.com przez pełnomocnika poprzez dodanie następujących do ~/.ssh/config:

host github.com 
    port 22 
    proxycommand corkscrew <proxy_ip_address> <proxy_port> %h %p ~/.ssh/myauth 

Teraz sprawdź, czy ssh może uzyskać dostęp do proxy przez ssh -T [email protected]. Jeśli to zadziała, protokół git:/ powinien również być w stanie przejść przez proxy.

+0

Dlaczego po prostu nie używałeś http? –

+0

Nie miałem pojęcia, że ​​mogłem przepuścić tylko mój korporacyjny serwer proxy przez protokół ssh. – Steven

Powiązane problemy