http 전송을 위해 git과 함께 socks 프록시 사용


81

git이 HTTP 전송을 위해 socks 프록시를 사용하도록 만드는 방법은 무엇입니까?

GIT 전송을 위해 socks 프록시를 사용하도록 GIT_PROXY_COMMAND로 git을 구성하는 데 성공했습니다.

또한 내 .curlrc 파일을 구성하여 socks 프록시를 정의했으며 다음과 같은 curl 명령으로 직접 정보를 가져올 수 있습니다.

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

그러나 다음과 같은 HTTP 전송 프로토콜을 사용하여 데이터를 검색하기 위해 git과 함께 socks 프록시를 사용하는 방법 :

git clone http://git.kernel.org/pub/scm/git

아래 patthoyts의 답변 은 git 2.7 (2015 년 12 월)에서 공식적으로 지원됩니다 : stackoverflow.com/a/34118102/6309
VonC

답변:


149

Git 1.8.2 및 SOCKS v5 프록시로 테스트했으며 다음 설정이 저에게 효과적입니다.

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

2017-3-31 업데이트 :

문서에 따르면 이름에도 불구하고 HTTP 및 HTTPS 저장소 URL 모두에서 작동합니다. 이것을 지적 해 주신 @user에게 감사드립니다.http.proxy

2018-11-27 업데이트 :

프록시를 비활성화하려면 다음 명령을 실행하십시오.

git config --global --unset http.proxy

2019-03-04 수정 :

당신은 또한 프록시를 사용하여 해결 될 호스트 이름을 원하는 경우, 아래의 사용 thuzhf의 솔루션은 사용하는 socks5h대신socks5


3
브란트 영, 감사합니다! 인터넷 연결을 잊고 외부 연결이 없었습니다. ssh -D 4000 <user> @server -p <port>와 함께 다른 서버를 게이트웨이로 사용했으며 git config http.proxy 'socks5 : // localhost : 4000'을 통해 프로젝트를 github에 업로드하는 데 성공했습니다. 감사합니다.

나는 돈을받을거야 난, 인터넷 :)에 대한 지불 사업 준비가 거의 :) 때문에

1
설정을 해제하려면 어떻게합니까? ''로 설정합니까?
briankip

2
@briankip 열기 ~/.gitconfig및 제거 [https.proxy][http.proxy]섹션, ini파일, 자유롭게 편집하십시오.
Yang.Y

3
@briankip, 구성에 영구적으로 넣는 대신 명령 줄에 넣을 수 있다고 생각합니다 git -c http.proxy=socks5://127.0.0.1:7070. 어쩌면 당신은 별칭 만들 수 gitsocks쉽게와 desired` 같은 양말없이 자식을 호출 할 수 있도록 할 것과,
아론 McDaid

52

프록시를 전역 구성으로 설정하지 않으려면 다음을 시도하십시오 ALL_PROXY=.

$ ALL_PROXY=socks5://127.0.0.1:8888 git clone https://github.com/some/one.git

1
감사합니다! 이것은 정말로 도움이되지만 글로벌 사람은 그렇지 않습니다.
redreamality dec

1
감사합니다! 정말 작동합니다!
smoothdvd

44

(조금 알림) 호스트 이름도 프록시에 의해 확인되도록하려면 (즉 , 프록시를 통해 모든 것을 전달하는 것을 의미 ), 특히 gist를 복제 할 때 다음 설정을 사용할 수 있습니다 (핵심은 대신 socks5h 를 사용 한다는 것입니다). 의 SOCKS5 ) :

git config --global http.proxy socks5h://127.0.0.1:1080

15

다음 명령을 사용하여 socks5 프록시에서 특정 저장소를 복제합니다. 프록시 설정은 --config옵션 으로 지정됩니다 .

$ git clone https://github.com/xxxxx --config 'http.proxy=socks5://127.0.0.1:1234'

이것이 저에게 유일한 솔루션입니다. 'ssh -D xxx'와 콤보
Tiana987642

7

참고 : 여기서 패치는 버전 2.4.11의 2015 년에 git에 적용되었습니다. 그 이후로 http.proxy 구성 설정과 함께 socks : // URL을 사용할 수 있습니다.

git : // 프로토콜의 경우 Using Git with a SOCKS proxy 있습니다. 그러나 git은 socks 프록시를 제대로 지원하지 않는 것으로 보입니다. git 자체는 libcurl에 연결됩니다. 따라서 .curlrc 파일은 사용되지 않습니다 (컬 명령 줄 클라이언트에만 해당). 그러나 다음 패치는 필요한 지원을 제공합니다. 이 패치를 git에 적용하면 ALL_PROXY 환경 변수 또는 HTTP_PROXY 또는 HTTPS_PROXY를 socks://hostname:portnum(또는 socks4 / socks5) 또는 실제로 http.proxy git config 설정으로 설정하면 libcurl은 이제 실제로 프록시를 사용할 때 socks 프로토콜을 사용합니다.

예를 들어, 활성 추적 :

$ 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 ...

필요한 패치 :

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;

내가 쓴 것처럼 GIT 전송을 위해 socks 프록시를 사용하도록 git을 구성하는 데 성공했습니다. 내가 원하는 위해 양말 프록시로 사용 자식이다 HTTP (S) 전송
이브 Blusseau

3

@briankip을 참조하고 Yang.Y가 언급했듯이 http 프록시 설정을 제거하면 ini 파일을 직접 편집 할 수 있습니다.

명령 줄에서 다음을 사용하여이 작업을 수행 할 수도 있습니다.

git config --global --unset http.proxy

제거되었는지 확인하려면 다음을 사용하여 현재 구성을 나열하십시오.

git config --list


1

제안 된 방법 중 어느 것도 나를 위해 일하지 않았으므로 다음 지침으로 다른 접근 방식을 찾았습니다.


  1. 다음을 SOCKS5사용하여 프로토콜을 통해 터널 (동적 포트 전달)을 만듭니다 ssh.
    ssh -ND 9994 user@YourSshServer

  1. proxychains연결된 ssh 서버가 아닌 로컬 호스트에 설치 하십시오.

  1. proxychains구성 파일을 편집
    sudo nano /etc/proxychains.conf한 후 파일 끝에 다음 행을 추가하십시오.
    socks5 127.0.0.1 9994

  1. 이제 git명령 을 수행 할 준비가되었습니다 ( proxychains명령 앞에 있어야 함).
    proxychains git push origin develop

0

불행히도 위의 어느 것도 나를 위해 일하지 않았지만 이것은 다음과 같이했습니다.

nano ~/.ssh/config

더하다:

Host my-host.foo.bar.com
    ProxyJump username@host.local

여기서 'host.local'은 공유 설정에서 '원격 로그인이 활성화 된'바닐라 맥입니다. 나를 위해 일했습니다 :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.