gitをHTTP Proxy経由で利用したい場合の対処法

会社や学校の中にいる場合、インターネットへアクセスする際に、Proxy(プロキシ)経由でのアクセスとなるシーンがよく見られるのではないでしょうか。

その場合、イントラネット内から分散型バージョン管理システム(分散SCM)であるgitを使った外部アクセスは難しく、特にサーバ側がgit-daemonで稼動している場合は、gitプロトコル(git://)でのアクセスとなり、HTTP Proxy経由でのアクセスにはコツが必要となります。


ということで、Proxy越えにチャレンジしてみることにします。

Corkscrewのインストール

まず、HTTP Proxyサーバを通してトンネリングできる「Corkscrew」を利用します。

# apt-get install corkscrew

私は、Debian使いですので、サクっとaptでインストールしました。
そうではない場合も、他パッケージ管理システムでもあると思いますし、下記サイトからソースをダウンロードしてインストールしてもOKです。

Corkscrew is a tool for tunneling SSH through HTTP proxies.
http://www.agroman.net/corkscrew/
$ ./configure
$ make
$ sudo make install

ソースからのインストールも、お決まりのパターン。

Proxyサーバの設定

で、「Corkscrew」のインストール完了後は、Proxyサーバの設定が必要です。
# Proxyサーバの管理者に手土産を持参してお願いして下さい(^^;


私の試した環境では、「squid」が動いていますので、squidの設定を変更します。

具体的には、以下のようにgitプロトコルで利用するポート番号"9418"を許可する設定をsquid.confに記述しておきます。

acl SSL_ports port 443 563 9418

・・・略・・・

http_access deny CONNECT !SSL_ports

squid.confの編集が終われば、squidをrestartして、設定を反映させます。

で、その後、任意の場所にファイルを作成(ex. ${HOME}/bin/git-proxy.sh)し、

#!/bin/sh
corkscrew <Proxyサーバホスト名> <ポート番号> $1 $2

↑の内容でファイル(ex. ${HOME}/bin/git-proxy.sh)を編集します。
これで前準備は完了。

Proxy経由でのgitコマンド実行

上記で作成したファイル(ex. ${HOME}/bin/git-proxy.sh)を指定して、、、

$ GIT_PROXY_COMMAND=${HOME}/bin/git-proxy.sh git clone git://github.com/rails/rails.git

こんな感じでコマンド(上記例はgithubのRailsリポジトリ)を打てば、プロキシ経由でのgitアクセスが可能です!

Let's Enjoy!

おまけ(Proxyアクセス時の認証)

ちなみにcorkscrewコマンドのヘルプを見てみると以下のようになっていて、

$ corkscrew -h
corkscrew 2.0 (agroman@agroman.net)

usage: corkscrew <proxyhost> <proxyport> <desthost> <destport> [authfile]

Proxyサーバのアクセス時に認証がかかる場合は、任意のファイルを作成し、

username:password

のフォーマットで編集し、上記の[authfile]でファイルを指定してやると良いらしい。

参考


入門git

入門git