git のリポジトリに ssh を利用してアクセスできるようにする.
プロジェクトのバージョン管理ツールとして git を利用しています.
3〜5人規模のプロジェクトなのでお手軽に運用したかったので、前回のプロジェクトまでは dropbox でリポジトリを共有するといった運用をしていたのですが、何回か dropbox 側でコンフリクトが発生してしまってリポジトリが壊れてしまったり、人的ミスでリポジトリ運用がうまく行かなかったりだとかといった問題があり、ちょっとしたストレスになっておりました.
そんなわけで、 GitHub や Bitbucket などのホスティングサービスを導入しようかと考えていたのですが、EC2インスタンスの空きを利用して運用できるならそれでもいいか?なんてことを思い立ちまして、いまさらながら git リポジトリに対して ssh アクセスを行えるような設定を行ってみたわけです.
わりとさっくり設定できたのでひとまずは満足です.
そんなわけでやったことのメモ書きを残しておきます.
クライアントの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
をソースパスに設定することになります.