git のリポジトリに ssh を利用してアクセスできるようにする.

プロジェクトのバージョン管理ツールとして git を利用しています.

3〜5人規模のプロジェクトなのでお手軽に運用したかったので、前回のプロジェクトまでは dropboxリポジトリを共有するといった運用をしていたのですが、何回か dropbox 側でコンフリクトが発生してしまってリポジトリが壊れてしまったり、人的ミスでリポジトリ運用がうまく行かなかったりだとかといった問題があり、ちょっとしたストレスになっておりました.

そんなわけで、 GitHub や Bitbucket などのホスティングサービスを導入しようかと考えていたのですが、EC2インスタンスの空きを利用して運用できるならそれでもいいか?なんてことを思い立ちまして、いまさらながら git リポジトリに対して ssh アクセスを行えるような設定を行ってみたわけです.

わりとさっくり設定できたのでひとまずは満足です.

そんなわけでやったことのメモ書きを残しておきます.

環境

  • EC2
  • ubuntu-trusty-14.04-amd64-server-20150325 (ami-936d9d93)

クライアントのSSH公開鍵を作成する

手順はあとでも良いのですが、クライアントから SSHキーペアを作成します.

mac では

> cd ~/.ssh
> ssh-keygen

とでもすれば、id_rsa と id_rsa.pub を作ることができます.

id_rsa.pub の方がEC2インスタンスに設定する公開鍵で、id_rsa のほうが自身で管理する秘密鍵になっています.

git ユーザーの作成

EC2インスタンス上で git 用のユーザーを作成します.

> sudo useradd -s /usr/bin/git-shell git 

git 用のユーザは、通常のユーザーとは違って git 以外の操作をする必要がないので git-shell を設定する点がポイントになります.

git-shell は制限付きのシェルなので、通常の SSH アクセスが行えません.

SSH公開鍵の登録

作成した git ユーザーには home ディレクトリを作らなかったので作成します.
所有権も git に設定しておきます.

> sudo mkdir /home/git
> sudo chown git:git /home/git

アクセスしたいSSH 公開鍵を登録します.

最初に作っておいたアクセス用の公開鍵は、頑張って適当な場所にコピーしておきます.

> sudo mkdir /home/git/.ssh
> cd /home/git/.ssh
# /home/ubuntu/tmp/ に id_rsa.pub がコピーされているとして
> cat /home/ubuntu/tmp/id_rsa.pub >> /home/git/.ssh/authorized_keys

アクセス権を適切な形に修正しておきます.

> sudo chown -R git:git /home/git/.ssh 
> sudo chmod 700 /home/git/.ssh
> sudo chmod 600 /home/git/.ssh/authorized_keys

リモートリポジトリの作成

あとは、適当な場所に bare リポジトリを作成します.

> sudo mkdir /home/git/sandbox.git
> cd /home/git/sandbox.git
> git --bare init
> sudo chown -R git:git /home/git/sandbox.git

mac + SourceTree で接続を行う

(ここからは作業マシン上での作業になります.)

mac 上の SourceTree で接続の確認を行おうと思ったのですが、SSHキーの設定がどこにあるのかわからずにハマりました.

作業mac の .ssh に "config" というファイルを作成して以下の情報を書き込んでおきます.

Host ${サーバのエイリアス}
    HostName ${サーバのIPアドレス}
    User git
    IdentityFile ${秘密鍵のパス}
サーバのエイリアス 自由につけて構いません
サーバのIPアドレス IPアドレスを書いてください
秘密鍵のパス ~/.ssh/id_rsa など

仮にサーバのエイリアスを ilv_git と設定した場合

> git clone ssh://git@ilv_git/home/git/sandbox.git

のようにアクセスを行うことができます.

SourceTree では、この config の設定を参照して ssh の解決がおこなわれるようなので、

ssh://git@ilv_git/home/git/sandbox.git

をソースパスに設定することになります.

今後の課題

我々の利用実績から考えると git のリポジトリはそれほど大きくならない傾向にはあるのですが、EC2インスタンスが8GiBで生成されているので容量不足が少し心配です.

S3 のバケットをマウントして git リポジトリをそこに配置することで、容量不足の心配をしなくても良い環境にできるのであれば楽できるかもしれません.

ま、ひとまずは様子を見てみたいと思います.

参考

https://blog.apar.jp/linux/2300/

基本的にはこのページに書かれていることと同じ内容になっていると思います.