トップ 最新

ただのにっき

2009-03-26(木) [長年日記]

Corkscrewでgitのproxy越え(その2)

先日のトライで、「git:~」なリポジトリに関してはアクセスできるようになったが、GitHubではpullなどの操作はsshを経由するので×なことが判明。逃げ道を探す。

環境変数ではなくgit configを使う

まず、proxy経由でのアクセスを指示するのに、環境変数はよくないという指摘をもらったので、正統派のgit configを使って指定する。

git config --global core.gitproxy 'git-proxy for github.com'

core.gitproxyではproxy越え用のコマンドと、それを使うドメインを指定する。普通、proxy指定ではproxyを使わないドメインを除外指定するけど、こっちは使うドメインを指定するのだな。用途からすると正しいかも。

当面あらゆる外部リポジトリはGitHubの予定なので、面倒だから--globalを指定した。これでいろんなプロジェクトで指定して回らなくて済む。別のサービスが増えるようなことになったら、リポジトリごとに指定しよう。

GitHubにproxy経由でsshアクセス

sshを使う場合は通常「git@github.com:USER/REPOS.git」、つまり「github.com:22」へアクセスするのだが*1、HTTP/HTTPSしか通さないproxyのために、ちゃんと「ssh.github.com:443」が用意されている(参考:Access GitHub repositories from work (take that, firewall!).)。

ということで、(「git@github.com:USER/PROJECT.git」というURLをコピペして使えるように)~/.ssh/configにちょっと仕掛けを入れればいい:

Host github.com
HostName ssh.github.com
Port 443
ProxyCommand corkscrew YOUR_PROXY_HOST YOUR_PROXY_PORT %h %p

これでいけるはず:

% git clone git@github.com:tdtds/rubbs.git
Initialized empty Git repository in /home/sho/src/rubbs/.git/
remote: Counting objects: 34, done.
remote: Compressing objects: 100% (34/34), done.
remote: Total 34 (delta 4), reused 0 (delta 0)
Receiving objects: 100% (34/34), 38.41 KiB, done.
Resolving deltas: 100% (4/4), done.
% 

おk!

Tags: git

*1 gitというアカウントを指定しているということは、GitHub上のユーザは全員同じアカウントで、公開鍵だけで識別されているということか。