Unix :: git / gitosis

gitosis は、複数の git リポジトリの管理を行うためのソフトウェアです。
gitosis-admin.git という管理用の git リポジトリを用い、gitosis.conf でどのユーザがどのリポジトリにアクセスできるのかを管理します。

% sudo yum install gitosis

もし上記でインストールできない場合は「epelレポジトリ」を導入する

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.

出来た!ひゃっほー


関連エントリー

    • ソースコードを管理するために使われるオープンソースの分散型バージョン管理システム
  1. gitosis
    • 複数の git リポジトリ管理に対応したソフトウェア
    • Gitで共有リポジトリのユーザー管理やアクセス管理を行うためのソフトウェア
    • CUI の git リポジトリブラウザ