Używanie proxy socks z git do transportu http

81

Jak sprawić, by Git używał proxy Socks do transportu HTTP?

Udało mi się skonfigurować git z GIT_PROXY_COMMAND, aby używać proxy socks do transportu GIT.

Skonfigurowałem również mój plik .curlrc, aby zdefiniować proxy socks i mogę pobierać informacje bezpośrednio za pomocą polecenia curl, takiego jak:

curl http://git.kernel.org/pub/scm/git/git.git/info/refs?service=git-upload-pack

Ale jak używać proxy socks z git do pobierania danych za pomocą protokołu transportowego HTTP, takiego jak:

git clone http://git.kernel.org/pub/scm/git
Yves Blusseau
źródło
Odpowiedź patthoyts poniżej będzie oficjalnie obsługiwana w git 2.7 (grudzień 2015 r.): stackoverflow.com/a/34118102/6309
VonC
stackoverflow.com/questions/10274879/…
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

Odpowiedzi:

149

Testowałem z Git 1.8.2 i SOCKS v5 proxy, działa dla mnie następujące ustawienie:

git config --global http.proxy 'socks5://127.0.0.1:7070'

AKTUALIZACJA 2017-3-31:

Zgodnie z dokumentem , pomimo nazwy , powinien działać zarówno dla adresów URL repozytoriów HTTP, jak i HTTPS. Dzięki @user za zwrócenie na to uwagi.http.proxy

AKTUALIZACJA 27.11.2018:

Aby wyłączyć proxy, uruchom polecenie:

git config --global --unset http.proxy

EDYCJA 2019-03-04:

Jeśli chcesz również, aby nazwa hosta była rozpoznawana za pomocą serwera proxy, użyj poniższego rozwiązania thuzhf, które używa socks5hzamiastsocks5

Yang.Y
źródło
3
brantyoung, dziękuję! Zapomniałem zapłacić za połączenie internetowe i nie miałem połączenia zewnętrznego. Użyłem innego serwera jako bramy z: ssh -D 4000 <user> @server -p <port> i udało mi się przesłać projekt na github przez: git config http.proxy 'socks5: // localhost: 4000'. Dziękuję Ci.
Dostanę pieniądze i zapłacę za internet :), bo projekt prawie gotowy :)
1
Jak rozbrajać? mam ustawić na „”?
briankip
2
@briankip otwórz ~/.gitconfigi usuń, [https.proxy]a [http.proxy]sekcje, to iniplik, możesz go edytować.
Yang.Y
3
@briankip, myślę, że możesz po prostu umieścić go w linii poleceń zamiast na stałe w konfiguracji, np. git -c http.proxy=socks5://127.0.0.1:7070lub coś w tym rodzaju. Może można zrobić alias gitsocksdo tego, który pozwoliłby, aby łatwo wywołać git i bez skarpetek jak desired`
Aaron McDaid
52

Jeśli nie chcesz ustawiać proxy jako konfiguracji globalnej, spróbuj ALL_PROXY=np:

$ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git
ohho
źródło
1
Dziękuję Ci! to naprawdę mi pomaga, podczas gdy globalny nie.
redreamality
1
Dziękuję Ci! NAPRAWDĘ DZIAŁA!
smoothdvd
44

(Małe przypomnienie) Jeśli chcesz, aby nazwa hosta była również rozwiązywana przez serwer proxy (co oznacza przekazywanie wszystkiego przez proxy ), zwłaszcza gdy klonujesz treść , możesz użyć następującego ustawienia (kluczem jest to, że zamiast tego używa socks5h z SOCKS5 ):

git config --global http.proxy socks5h://127.0.0.1:1080
thuzhf
źródło
15

Używam następującego polecenia, aby sklonować określone repozytorium z serwera proxy socks5. Ustawienia proxy są określane za pomocą --configopcji.

$ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'
alijandro
źródło
To jest jedyne rozwiązanie, które działa dla mnie, kombinacja z 'ssh -D xxx'
Tiana987642
7

Uwaga: łatka została zastosowana do gita w 2015 roku w wersji 2.4.11. Od tego czasu możesz po prostu używać socks: // urls z ustawieniami konfiguracyjnymi http.proxy.

Dla protokołu git: // używamy Gita z proxy SOCKS . Wygląda jednak na to, że git nie obsługuje poprawnie serwerów proxy skarpet. Sam git jest powiązany z libcurl. Więc plik .curlrc nie jest używany (to jest tylko dla klienta wiersza poleceń curl). Jednak następująca poprawka zapewnia niezbędne wsparcie. Po zastosowaniu tej łatki do git możemy po prostu ustawić zmienną środowiskową ALL_PROXY lub HTTP_PROXY lub HTTPS_PROXY na socks://hostname:portnum(lub socks4 / socks5) lub rzeczywiście ustawienie konfiguracyjne git http.proxy, a libcurl będzie teraz faktycznie używać protokołu socks podczas korzystania z proxy.

Na przykład aktywny ślad:

$ GIT_CURL_VERBOSE=1 bin-wrappers/git -c "http.proxy=socks://localhost:1080" ls-remote http://github.com/patthoyts/tclftd2xx.git
* Couldn't find host github.com in the _netrc file; using defaults
* About to connect() to proxy localhost port 1080 (#0)
*   Trying 127.0.0.1...
* connected
* SOCKS4 request granted.
* Connected to localhost (127.0.0.1) port 1080 (#0)
> GET /patthoyts/tclftd2xx.git/info/refs?service=git-upload-pack HTTP/1.1
User-Agent: git/1.8.1.msysgit.1.dirty
... and on to a successful request ...

Niezbędna poprawka:

diff --git a/http.c b/http.c
index 3b312a8..f34cc75 100644
--- a/http.c
+++ b/http.c
@@ -322,6 +322,14 @@ static CURL *get_curl_handle(void)
        if (curl_http_proxy) {
                curl_easy_setopt(result, CURLOPT_PROXY, curl_http_proxy);
                curl_easy_setopt(result, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
+#if LIBCURL_VERSION_NUM >= 0x071800
+               if (!strncmp("socks5", curl_http_proxy, 6))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
+               else if (!strncmp("socks4a", curl_http_proxy, 7))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4A);
+               else if (!strncmp("socks", curl_http_proxy, 5))
+                       curl_easy_setopt(result, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
+#endif
        }

        return result;
patthoyts
źródło
Tak jak napisałem, udało mi się skonfigurować git do używania proxy socks do transportu GIT. Chcę używać git z proxy skarpet do transportu HTTP (S)
Yves Blusseau
3

W nawiązaniu do @briankip i usunięciu ustawienia proxy http, jak wspomniał Yang.Y, możesz bezpośrednio edytować plik ini.

Możesz to również zrobić w wierszu poleceń za pomocą

git config --global --unset http.proxy

Aby potwierdzić usunięcie, wyświetl bieżącą konfigurację za pomocą

git config --list

Paul H.
źródło
1

Żadna z sugerowanych metod nie zadziałała, więc znalazłem inne podejście, takie jak poniższa instrukcja:


  1. Utwórz tunel (dynamiczne przekierowanie portów) przez SOCKS5protokół przy użyciu ssh:
    ssh -ND 9994 user@YourSshServer

  1. Zainstaluj proxychainsna hoście lokalnym, a nie na serwerze ssh, z którym jesteś połączony:

  1. Edytuj proxychainsplik konfiguracyjny:
    sudo nano /etc/proxychains.confnastępnie dodaj następujący wiersz na końcu pliku:
    socks5 127.0.0.1 9994

  1. Teraz jesteśmy gotowi do wykonania gitpolecenia ( proxychainsnależy je umieścić przed poleceniem):
    proxychains git push origin develop
Benyamin Jafari
źródło
0

Żadne z powyższych nie działało niestety, ale to zadziałało:

nano ~/.ssh/config

Dodaj:

Host my-host.foo.bar.com
    ProxyJump [email protected]

Gdzie „host.local” to klasyczny komputer Mac z włączoną opcją zdalnego logowania w ustawieniach udostępniania. Pracował dla mnie :)

Chris
źródło