学内LANのプロキシはポート番号で接続に制限をかけている。今回中央リポジトリはこの制限に引っかかるため、学内から直接にはつなげない。そこで制限がかけられていない(プロキシを通す必要がない)sunを踏み台にして中央リポジトリにつなげる方法を解説する。  ちなみにこの設定はMMAの松宮先輩、薮先輩に教わった物である。  まず$HOME/.ssh/configファイルに以下の内容を追加する。(なければ作成する) 中括弧({})で囲んだ部分は各自の環境に合わせて適宜変更する。 Host sun HostName sun.edu.cc.uec.ac.jp User {sunのアカウント名 ex.m1210133} Host mmagit.andantesoftware.com ProxyCommand ssh sun /home1/y2012/m1210133/mac/local/bin/netcat %h %p Host mmagit.andantesoftware.com HostName mmagit.andantesoftware.com IdentityFile {ローカルのホームディレクトリ}/.ssh/id_rsa User git Port 14157  おそらく3段目はmasawadaからの指定ですでにしているかと思う。その場合3段目は必要ない。  この設定をした後、中央リポジトリに接続しようとするとパスワードを聞かれる。これに対してはsunのアカウントのパスワードを答える。それ以外は普通に接続する時とかわらない。  以下、この設定が何を意味しているかを説明する。別にこれ読まなくても使えることは使える。  まず1段目。これはsunというhostについての設定である。この辺はMMAの講習会でもやったが、ようするに毎回いちいちsshでオプション指定するのが面倒臭いからやってるものである。ここでは2段目の設定をシンプルに書くために分けてある。  次に2段目。ここでmmagit.andantesoftware.com(中央リポジトリ)に接続する際、sunを踏み台にするよう指定している。  ProxyCommandはそのホスト(つまりmmagit.andantesoftware.com)に接続する際に実行するコマンドを指定する。このとき%hはホスト名で、%pはポート番号で置換される。  実際にmmagit.andantesoftware.comに接続しようとしたときどうなるかというと”ssh sun /home1/y2012/m1210133/mac/local/bin/netcat mmagit.andantesoftware.com 14157”が実行される。これはsunに接続し、/home1.../bin/netcat ...を実行せよというコマンドである。このときこのコマンドの標準入力にはローカルの標準入力が、標準出力にはローカルの標準出力が割り当てられる。ポート番号が14157となっているのは3段目の設定が効いているからである。  /home1/..../bin/netcatはどのようなコマンドかというと指定されたホストに指定されたポート番号で接続し、受け取った入力をそのまま接続先に投げ、返ってきたメッセージをそのまま出力するものである。(本当はもっと高機能なんだが説明がややこしくなるので簡略化している。)  ちなみにm1210133はizのsunでのアカウント名である。何でこんな所にコマンドがあるのかというと標準で入ってなかったからしょうがなく自分でソース落としてきてコンパイルしたんだな。izのホーム以下なのでizの気分次第でディレクトリ構造が変わったりパーミッションが変わったりする。(さすがにハッカソンの間中は変えないが。)すると当然この設定はうまく行かなくなる。それが嫌な人は各自のホームにizのホームにあるlocalディレクトリをコピーするといい。tmuxも一緒に入る。   長々と説明したが何が起こっているかというと ・ローカルでの入力がProxyCommandのsshによりsun上で走るnetcatに投げられる ・netcatが投げられた入力をそのままmmagit.andantesoftware.conに投げる ・mmagit.andantesoftware.comが適当に処理をし、出力をsunのnetcatに投げる ・netcatが投げられたmmagit.andantesoftware.conの出力をそのままローカルに投げる ということである。  (なんで標準入力だの標準出力だのの設定をしたらgitが動くんだよと思った人へ:gitはsshの標準入力に通信内容を投げることで動いているんです。正確じゃないかもしれんけどこれに準ずることをやってるんです。)  (めんどくせえと思った人へ:あっちゃこっちゃドキュメント探しながらnetcatコンパイルしてこんな設定までした僕はもっと面倒くさかったさ。gcc3なんかはじめて使ったわ。OpenSSLの最近のバージョンだとnetcatと同じ動作するオプションがあるらしいんだけどね、sunに入ってるののバージョンがね、ちょっとね…)  (?2段目と3段目分ける必要あんの?と思った人へ:ないよ。まとめてもok。別に1段目もまとめてもいい。)