It's raining cats and dogs.

無駄なことなんてないはず

httpsでのgit cloneをやめてssh over https portでcloneした話

以前gitのバージョンが1.7.10以下の環境でhttpsを使ってgithubからcloneするエントリを書いた。

http://tadasy.hateblo.jp/entry/20130903/1378209883

基本的にはコレで問題無さそうで、個人の環境をとして使うのであれば特に問題はないのだけれど、共有の環境、例えばステージング環境や本番を作る場合にはちょっと問題になる。というのも

$ git clone https://<githubのユーザーID>@github.com/sampleProject/hoge.git

こんな感じでcloneしてたのだけど、fetchするときなどに<githubのユーザーID>で指定したアカウントのパスワードを入力しなければいけない。↓な感じで。

$ git fetch
Password for 'https://<githubのユーザーID>@github.com':

.git/configを確認しても

$ cat .git/config
....
 [remote "origin"]
         url = https://<githubのユーザーID>@github.com/sampleProject/hoge.git
         fetch = +refs/heads/*:refs/remotes/origin/*
...

とユーザーIDが書かれている。

みんなで使う環境だとこのアカウントのパスワードを知らないとどうにもならない(もしかしたらやり方があるかもしれないけど)
共有のアカウントを作ればいいのかもしれないけど、それはそれでなんだかなぁと。

あと、

https://username:password@github.com/sampleProject/hoge.git

こんな感じでパスワードも指定できるよ的なことを書いたのだけど、たしかにこれでやればパスワードは覚えなくてよいのだけど、これでやると当然.git/configにもパスワードが記載されてしまう。

$ cat .git/config
...
 [remote "origin"]
         url = https://username:password@github.com/sampleProject/hoge.git
         fetch = +refs/heads/*:refs/remotes/origin/*
...

さすがにコレはまずい。

というわけで見つけたのが↓

https://help.github.com/articles/using-ssh-over-the-https-port

記事に書いてあるとおり、まさにそのままなんだけど、要は、githubのほうでhttps上でssh接続ができる環境を用意してくれていて、それを使えばファイアーウォールでssh閉じられててもsshで接続できるよって話。

まずは接続テスト

$ ssh -T -p 443 git@ssh.github.com
Hi <githubのユーザーID>! You've successfully authenticated, but GitHub does not provide shell access.

接続できた風。 あとは ~/.ssh/config に以下を追加すればOK

Host github.com
  Hostname ssh.github.com
  Port 443

で、sshを使ってcloneしたら完了。

$ git clone git@github.com:sampleProject/hoge.git

ちなみにsshでの接続になるので、以前書いた

http://tadasy.hateblo.jp/entry/20130918/1379509506

このへんなんかも必要なくなってしまった。
もっと早く気がついていれば...