AWS(EC2)にGitoliteをインストールする

前回導入したGit。
ユーザの追加やリポジトリを作るのに、いちいちsshでサーバに接続するのは面倒なので、
Gitの管理を楽にするためにGitoliteを導入することにした。

 
Gitoliteは簡単に言えば、リポジトリに公開鍵を追加したり設定ファイルを編集するだけで、
Gitのリモートサーバのユーザ追加やリポジトリの作成、アクセス権限などを管理できるツール。
導入してしまえばなかなか便利なのだが、導入にちょっと手間取ったので備忘録。

 

Gitolite管理者ユーザのアカウント作成

Gitoliteをインストールする前に、Gitoliteを操作するための管理者ユーザを作成しておく。
サーバ上に作成するアカウントは、この管理者ユーザのみ。
Gitを利用する人は、この管理者ユーザのアカウントでsshログインする。

 
管理者ユーザ(gitolite-user)用の公開鍵と秘密鍵を作成しておく。
私の場合は、SourceTreeの「ツール」->「sshキーの作成/インポート」から作成。
公開鍵の「***.pub」の***がGitのユーザ名となるので、以下のファイル名で作成。
※管理上、秘密鍵も同じ名前にしておく。

公開鍵:gitolite-user.pub
秘密鍵:gitolite-user.ppk

 
ec2-userでサーバにログインし、管理者ユーザのアカウントを作成、suする。

[code lang=”bash” gutter=”off”]
$ sudo useradd -m gitolite-user
$ sudo su gitolite-user
$ cd ~
[/code]

 
公開鍵の置き場所を作成
[code lang=”bash” gutter=”off”]
$ mkdir .ssh
[/code]

 
作成した公開鍵を.sshディレクトリにコピーし、権限設定。
※コピー自体はクライアント操作なので割愛。
[code lang=”bash” gutter=”off”]
$ chmod 700 /home/gitolite-user/.ssh
$ chmod 600 /home/gitolite-user/.ssh/gitolite-user.pub
[/code]

 

s3バケットの準備

前回作成したs3のマウントにリポジトリを作成したいので、
管理者ユーザのhomeディレクトリにシンボリックリンクを作成する。
※s3を使わないのであればここは省略。
※正直s3は遅すぎて使用に耐えないので後で元に戻した。
[code lang=”bash” gutter=”off”]
$ ln -s /s3fs/repositories repositories
[/code]

 

Gitoliteのダウンロードとインストール

[code lang=”bash” gutter=”off”]
$ git clone git://github.com/sitaramc/gitolite
[/code]

 
Gitoliteのデフォルトインストール先である$HOME/binを作成し、パスを通す。
[code lang=”bash” gutter=”off”]
$ mkdir bin
$ export PATH=$HOME/bin:$PATH
[/code]

 
Gitoliteをインストールする
[code lang=”bash” gutter=”off”]
$ gitolite/install -ln
$ gitolite setup -pk .ssh/gitolite-user.pub
Initialized empty Git repository in /home/gitolite-user/repositories/gitolite-user.git/
Initialized empty Git repository in /home/gitolite-user/repositories/testing.git/
WARNING: /home/gitolite-user/.ssh/authorized_keys missing; creating a new one
(this is normal on a brand new install)
[/code]
WARNINGが出ているけれど、authorized_keysがなかったんで作ったよと言うだけ(※1)。

 

クライアント側から接続確認

以下のURL(GitとGitoliteではURLの記述の仕方が違うので注意!!※2)からcloneを作成する。

[code lang=”bash” gutter=”off”]
gitolite-user@<hostname>:gitolite-admin
[/code]

 
無事に「gitolite-admin」がcloneできればOK!

 

ユーザを追加する

追加ユーザ(hoge)用の公開鍵と秘密鍵を作成しておく。

公開鍵:hoge.pub
秘密鍵:hoge.ppk

 

公開鍵をクローンした「gitolite-admin」リポジトリに配置する。

[code lang=”bash” gutter=”off”]
gitolite-admin/keydir/hoge.pub
[/code]

 
リポジトリ、ユーザごとにアクセス権を設定する場合は

[code lang=”bash” gutter=”off”]
gitolite-admin/conf/gitolite.conf
[/code]

を編集するが、これは後ほど。
編集したリポジトリをコミット&プッシュして追加完了。

 

リポジトリ(fuga)を追加する

gitolite-admin/conf/gitolite.confを編集し、以下を追記する。

[code lang=”xml” line=”1″]
repo fuga
RW+ = hoge
[/code]

上記では、「fuga」と言うリポジトリのアクセス権をユーザーhogeにだけ付与している。
リポジトリをコミット&プッシュして、リポジトリ作成完了。

 

追加したユーザで新規作成したリポジトリに接続

以下のURLからcloneを作成する。

[code lang=”bash” gutter=”off”]
gitolite-user@<hostname>:fuga
[/code]
※接続URLに記述するアカウントはhogeではなくgitolite-userなので注意。
 Gitoliteは使用する鍵でログインユーザを切り替えている。
 うまく接続できない場合は、認証に使用している秘密鍵を見直す。

無事に追加したリポジトリ「fuga」がcloneできればOK。

 

※1

ここでsshでもログインできるように、あらかじめauthorized_keysを作成しておくと
Gitoliteの認証できなくなる。(ここでちょっとハマった)

Gitoliteはauthorized_keysで認証に使われる鍵ごとに実行するcommandを設定する。
※知らなかったけど、これはsshの機能らしい。
こんな感じ

[code lang=”xml” line=”1″]
# gitolite start
command="/home/gitolite-user/gitolite/src/gitolite-shell gitolite-user",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
# gitolite end
[/code]

こうしておくことで、gitolite-userの秘密鍵でログインすると、
ログイン直後にcommandに記載された内容が実行される。
ところがsshログインのために同じキーが記述されていると、
Gitoliteのcommand設定はその後ろに追記されてしまい、結果的に無効になってしまう。
この状態だと、Gitoliteとしてログインできない。

[code lang=”xml” line=”1″]
ssh-rsa AAAA…
# gitolite start
command="/home/gitolite-user/gitolite/src/gitolite-shell gitolite-user",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…
# gitolite end
[/code]

後ろに書けばよいのかと言えば、そうでもないらしい。
Gitoliteで使用するユーザはsshで直接ログインはあきらめるしかないようだ。
ま、suすればいいんだけどね。

 

※2

GitとGitoliteではURLの記述の仕方が違うので注意!!

Git
ssh://gitolite-user@/home/gitolite-user/repositories/gitolite-admin
Gitolite
gitolite-user@:gitolite-admin

Gitでは接続できるのに、Gitoliteでは接続できない場合は、※1のポイントを見直す

 

コメント

  1. […] ネタ的には前々回の続き […]

タイトルとURLをコピーしました