gitosis は、複数の git リポジトリの管理を行うためのソフトウェアです。
gitosis-admin.git という管理用の git リポジトリを用い、gitosis.conf でどのユーザがどのリポジトリにアクセスできるのかを管理します。
% sudo yum install gitosis
1. EPEL レポジトリをダウンロード
% wget http://ftp-srv2.kddilabs.jp/Linux/distributions/fedora/epel/<V>/x86_64/epel-release-<V>-<R>.noarch.rpm
2. リポジトリを追加
% sudo rpm -Uvh epel-release-6-8.noarch.rpm
3. 通常は利用しないようにしておく
% sudo vi /etc/yum.repos.d/epel.repo : enabled=0 # 一番上の「enabled」を0に変更 :
4. yum install
% sudo yum --enablerepo=epel install gitosis
% sudo -H -u gitosis gitosis-init < ~/.ssh/authorized_keys Initialized empty Git repository in /var/lib/gitosis/repositories/gitosis-admin.git/ Reinitialized existing Git repository in /var/lib/gitosis/repositories/gitosis-admin.git/
下記のようなエラーが出る場合は、公開鍵の末尾に「ユーザー名@ホスト名」が記載されていないのが原因です。
Traceback (most recent call last): File "/usr/bin/gitosis-init", line 7, in ? sys.exit( File "/usr/lib/python2.4/site-packages/gitosis/app.py", line 24, in run return app.main() File "/usr/lib/python2.4/site-packages/gitosis/app.py", line 38, in main self.handle_args(parser, cfg, options, args) File "/usr/lib/python2.4/site-packages/gitosis/init.py", line 121, in handle_args user = ssh_extract_user(pubkey) File "/usr/lib/python2.4/site-packages/gitosis/init.py", line 39, in ssh_extract_user raise InsecureSSHKeyUsername(repr(user)) gitosis.init.InsecureSSHKeyUsername: Username contains not allowed characters: 'xxxxxxxxxx...'
公開鍵をコピー(cp -a)して、下記のように末尾に適当(適切)な「ユーザー名@ホスト名」を追記します。
% cd ~/.ssh % cp -a authorized_keys authorized_keys2 % vi authorized_keys2 ...xxxxxxxxx username@hostname
「ユーザー名@ホスト名」を追記した公開鍵を authorized_keys2 とし、改めてコマンドを実行します。
% sudo -H -u gitosis gitosis-init < ~/.ssh/authorized_keys2
/var/lib/gitosis/.ssh/authorized_keys
gitosis は、自身の管理も git を通して行います。
そのリポジトリが gitosis-admin.git であり、ここに設定ファイルや鍵が保存されます。
以下は、gitosis-admin.git を clone する手順になります。
管理方法としては、例えば、プロジェクトのルートディレクトリ「projects」等を作り、その配下で各プロジェクトを管理するとします。
|-- projects | |-- gitosis-admin <- git clone して、ここ配置する | |-- proj1 | |-- proj2 | |-- proj3
% mkdir ~/projects % cd ~/projects % git clone ssh://gitosis@localhost/gitosis-admin.git
git clone した時、以下のように怒られる場合の対処方法
% git clone ssh://gitosis@localhost/gitosis-admin.git Cloning into 'gitosis-admin'... Permission denied (publickey,gssapi-with-mic). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
原因はいろいろ考えられるが、今回の場合、sshd_config の UsePAM が原因でした。
(原因究明まで、半日潰しました。。)
% sudo vi /etc/ssh/sshd_config UsePAM no #UsePAM yes ↓変更 #UsePAM no UsePAM yes
% sudo /etc/init.d/sshd restart
ちなみに今回、/var/log/secure を見て、UsePAM の設定が原因であることに辿り着きました。
下記のようなログが出力されていたら、PAM の設定を疑ってみてください。
% sudo less /var/log/secure : ... User gitosis not allowed because account is locked :
% git clone ssh://gitosis@localhost/gitosis-admin.git Cloning into 'gitosis-admin'... remote: Counting objects: 5, done. remote: Compressing objects: 100% (4/4), done. remote: Total 5 (delta 0), reused 5 (delta 0) Receiving objects: 100% (5/5), done.
出来た!ひゃっほー