httpトランスポートにgitでsocksプロキシを使用する


81

gitにHTTPトランスポートにsocksプロキシを使用させる方法は?

GITトランスポートにsocksプロキシを使用するようにGIT_PROXY_COMMANDを使用してgitを構成することに成功しました。

また、socksプロキシを定義するように.curlrcファイルを構成しました。次のように、curlコマンドを使用して情報を直接フェッチできます。

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

しかし、gitでsocksプロキシを使用して、次のようなHTTPトランスポートプロトコルを使用してデータを取得する方法:

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

以下のpatthoytsの回答は、git 2.7(2015年12月)で正式にサポートされます:stackoverflow.com/a/34118102/6309
VonC

回答:


149

Git1.8.2とSOCKSv5プロキシでテストしましたが、次の設定が機能します。

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
brantyoung、ありがとう!インターネット接続の支払いを忘れてしまい、外部接続がありませんでした。ssh -D 4000 <user> @server -p <port>を使用して別のサーバーをゲートウェイとして使用し、プロジェクトをgithubにアップロードすることに成功しました:git config http.proxy'socks5:// localhost:4000 '。ありがとうございました。

プロジェクトの準備がほぼ整っているので、お金を稼ぎ、インターネットの料金を支払います:)

1
設定を解除するにはどうすればよいですか?''に設定しますか?
briankip 2016

2
@briankipはファイルを開い~/.gitconfigて削除し[https.proxy][http.proxy]セクションiniを自由に編集してください。
Yang.Y 2016

4
@briankip、設定などで永続的に使用するのではなく、コマンドラインに配置するだけでよいと思いますgit -c http.proxy=socks5://127.0.0.1:7070。たぶん、あなたはそれにエイリアスgitsocksを作ることができます、それはあなたが望むように靴下の有無にかかわらずgitを簡単に呼び出すことを可能にするでしょう `
Aaron McDaid

52

プロキシをグローバル設定として設定したくない場合は、次のALL_PROXY=例を試してください。

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

1
ありがとうございました!これは本当に私を助けますが、グローバルなものはそうではありません。
redreamality 2015

1
ありがとうございました!本当にうまくいきます!
Smoothdvd 2016

44

(ちょっとした注意)ホスト名もプロキシによって解決されるようにしたい場合(つまり、すべてをプロキシに渡すことを意味します)、特に要点を複製する場合は、次の設定を使用できます(キーは代わりに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
-Dxxx

7

注:ここでのパッチは、バージョン2.4.11の2015年にgitに適用されました。それ以降は、http.proxy構成設定でsocks:// urlsを使用できます。

git://プロトコルの場合、SOCKSプロキシでGitを使用します。ただし、gitはsocksプロキシを適切にサポートしていないようです。git自体はlibcurlにリンクされています。したがって、.curlrcファイルは使用されません(これは、curlコマンドラインクライアント専用です)。ただし、次のパッチは必要なサポートを提供します。このパッチを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)トランスポート用のsocksプロキシでgitを使用することです
Yves Blusseau 2013年

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.