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!
*1 gitというアカウントを指定しているということは、GitHub上のユーザは全員同じアカウントで、公開鍵だけで識別されているということか。
bitbucketなんかもsshアカウントはhg共通で、鍵で識別してますね。
公開鍵をDBに入れちゃえば、ユーザ管理が楽ですしね。賢いな。