akishin999の日記

調べた事などを書いて行きます。

gitolite のユーザ管理の仕組み

最近になって gitolite を使ってみたのですが、かなり便利ですね。

gitolite では OS のユーザを作成せずに、SSH の公開鍵を登録するだけでユーザを追加できる仕組みになっているのですが、これって一体どうやっているのでしょうか。

gitolite ユーザの authorized_keys の内容を見てみると、以下のように複数の公開鍵が登録されており、それぞれ先頭部分に「command="/usr/bin/gl-auth-command user1"」のようにコマンドらしきものが指定されています。

# cd /var/lib/gitolite/
# cat .ssh/authorized_keys
# gitolite start
command="/usr/bin/gl-auth-command admin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA 〜略〜 eQ== akishin@centos5-5-1
command="/usr/bin/gl-auth-command akishin",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA 〜略〜 wu0Z
command="/usr/bin/gl-auth-command user1",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA 〜略〜 Ww== user1@centos5-5-1
# gitolite end

なんだろうと思いいろいろ調べてみると、authorized_keys ファイルには鍵ごとに実行されるコマンドを指定する事ができるとのこと。

AUTHORIZED_KEYS ファイルの形式
http://www.unixuser.org/~euske/doc/openssh/jman/sshd.html#AUTHORIZED_KEYS%20%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E5%BD%A2%E5%BC%8F

公開鍵認証時に git ユーザ名を引数に gl-auth-command を呼び出すことで、ユーザの識別やアクセス制限を行っているんですね。
gitolite のドキュメントでもこの仕組みについて解説がされています。

how does gitolite use all this ssh magic?
http://sitaramc.github.com/gitolite/gl_ssh.html#gitolite_and_ssh_how_does_gitolite_use_all_this_ssh_magic__

この仕組みは gitolite を触るまで全然知りませんでした。
SSH も奥が深いですね。