github.comに22番ポート以外でアクセスしてソースを取得する

githubはなかなかに便利で,ソースを上げることが多い.
そしてサーバー運用時にも,そこからソースを取ってきてデプロイできるように組んでいたりすることがある.




ただし,気を使うのが非公開のプライベートリポジトリだ.

プライベートなので,ログインしないとソースにアクセスできない.

そのため,普段の開発環境であれば,ユーザ名とパスワードを入力したり,鍵認証できるように用意してしまったりしている.


しかし,これらの通信は要するにsshなので,基本的には22番ポートを使用している.


ここで問題になるのが,割とサーバーによっては22番が空いてなかったり!ということがある辺りだ.
そいういう運用サーバーでも,ソースはgithubから取りたいときに便利なのが,443.

なにしろhttpsで普通に使うポートなので,だいたい開けておく場合が多い.

443ポートを通してgithub.comにログインさせる.しかも鍵認証で!


ターミナルの場合,

$ ssh -T git@ssh.github.com -p 443 -i [秘密鍵]

とかやってみると,通信に成功しているのが確認できるかと思う.

$ ssh -T git@ssh.github.com -p 443 -i [秘密鍵]
Hi [ユーザ名]! You've successfully authenticated, but GitHub does not provide shell access.

特定のリポジトリを取りたい場合は,

git@ssh.github.com:user_name/repository.git

に443ポートでアクセスすれば,鍵認証に成功する.




俺が今回苦労したのはAWSのOpsWorks.

なにしろVPCの内側,プライベートのsubnetの中にあるインスタンスに,github.comの非公開リポジトリを落としたかったが……


f:id:h3poteto:20140624222550p:plain


図の通り,どう考えてもNATしている部分に22番ポートの穴あけが必要になる.

でもこれ……やりたくないですよね.
ここで22番開けたくない.


というわけで,443を介するようにしたという流れです.


OpsWorksでは,ソースの取得先アドレスに

ssh://git@ssh.github.com:443/user_name/repository.git

として,正しい秘密鍵を用意すれば,取ってこられます.



やってみれば「なーんだ」っていうところですが,なかなかにVPCを超えられずに苦労しました.



ちなみに普通に22番ポートでやるときは

$ ssh -T git@github.com -i [秘密鍵]

とやってみれば成功しているのがわかります.

ソース取得も同じく

git@github.com:user_name/repository.git

でとれますね.