経緯
研究室に配属されPCが支給されたのだが、GitHubにSSH接続が出来ない。理由は単純で、学内ネットワークでは22番ポートが閉じており、プロキシ経由で443番ポートを通して通信する必要があるからである。この設定自体は単純で、調べれば出てくるのだが私の環境ではどうも一筋縄ではいかなかった。同じような方のために、私の環境で使用した方法を書いておく。
SSHでプロキシを設定する。
.ssh/configを編集し、次のように記述する。
Host github.com
User git
Hostname ssh.github.com
IdentityFile ~/.ssh/id_rsa
Port 443
ProxyCommand connect.exe -H <プロキシサーバのアドレス>:<ポート> %h %p
AddressFamily inet
Host ssh.github.com
User git
Hostname ssh.github.com
IdentityFile ~/.ssh/id_rsa
Port 443
ProxyCommand connect.exe -H <プロキシサーバのアドレス>:<ポート> %h %p
AddressFamily inet
上記のように記述したけど無理だった。どうやら、通常C:/Program files/Git/binに配置されているconnect.exeが私の環境では無かったようなのでエラーを吐いたようだ。
こうなると、connect.exeのソースコードを自前でコンパイルする必要がある。
#connect.cのコンパイル
connect.exeのソースコードは、connect.cというものらしい。gistに公開されているのでこれをダウンロードしてコンパイルすればいいのだ。LinuxとWindowsではソケット通信に使用するライブラリが異なるため、リンカを設定する必要があることに注意する。コマンドライン上で次のように実行すればconnect.exeが作成される。
gcc -o connect -lwsock32 connect.c -lws2_32
作成されたconnect.exeは、適当な場所に配置する。**C:/Program files/Git/binに配置するときはスペースが含まれることに注意する。何もしないとエラーを吐くのでエスケープ文字等で対処する。**私はめんどくさいのでCドライブ直下に配置した。
#.ssh/configを書き直す
.ssh/configを、次のように書き直す。
Host github.com
User git
Hostname ssh.github.com
IdentityFile ~/.ssh/id_rsa
Port 443
ProxyCommand <connect.exeの絶対パス> -H <プロキシサーバのアドレス>:<ポート> %h %p
AddressFamily inet
Host ssh.github.com
User git
Hostname ssh.github.com
IdentityFile ~/.ssh/id_rsa
Port 443
ProxyCommand <connect.exeの絶対パス> -H <プロキシサーバのアドレス>:<ポート> %h %p
AddressFamily inet
GitHubにテスト接続を行い、"welcome to ~"的なことが表示されてたら成功。
#参考文献
http://wiki.jwds.jp/index.php?SSH%20Proxy%20Command%20connect.c