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 も奥が深いですね。