Инструменты пользователя

Инструменты сайта


Боковая панель

Связь

git_i_gitolite

Git и Gitolite

OS: Debian 7 GNU/Linux wheezy

Gitolite работает поверх SSH с использованием аутентификации через public-key (точнее, это наиболее популярная конфигурация). На сервере заводится единственный реальный пользователь, через которого будет происходить работа с репозиториями. А «магия» gitolite заключается в том, что в authorized_keys эти ключики попадают с опцией «command=[path]/gl-auth-command …». Эта опция предписывает ssh- серверу запускать указанную команду независимо от того, что реально хотел исполнить пользователь. При этом оригинальная команда сохраняется в переменной SSH_ORIGINAL_COMMAND, которую и считывает gitolite, чтобы узнать, что от него хотели.

Вы не должны устанавливать ключи на сервер вручную (через ssh-copy-id). Всё надо делать через gitolite-admin/keydir и gitolite-admin/conf/gitolite.conf. В первую папку кладёте публичный ключ, в gitolite.conf прописываете имя пользователя, совпадающее с именем ключа до .pub Дело в том, что gitolite не просто добавляет ключи в .ssh/authorized_keys, а записывает там команду, по которой потом и происходит авторизация в gitolite. Выглядит это в authorized_keys так
command="/usr/local/bin/gl-auth-command username",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa дальше пошел ключ

Инсталляция Gitolite

  • Установка git- сервера и Gitolite. Существует 4 способа установки Gitolite. На сервере на котором будут располагаться репозитории:
    # aptitude install git gitolite
  • Создание серверного git- пользователя, который будет общим для всех клиентов git. Gitolite управляет несколькими репозитариями под одной учетной записью пользователя, с использованием SSH ключей для идентификации пользователей. Конечным пользователям не нужны учетные записи на сервере, они будут входить через один общий аккаунт, который не позволит им запускать произвольные команды.
    # useradd -d /home/gitserver/ -m -c 'git version control' git
    # passwd git
  • На клиентском хосте управления gitolite можно создать нового пользователя gitadmin, либо воспользоваться уже существующим
    # /usr/sbin/useradd gitadmin
    # passwd gitadmin
  • Настраиваем SSH авторизацию по rsa- ключам админ- хоста на сервер. Для этого создадим на админском компьютере ключи и скопируем их на сервер. Важно имя файла до .pub должно совпадать с именем пользователя, в этом случае имя user, поэтому при копировании переименовываем id_rsa.pub в user.pub
    $ ssh-keygen -t rsa -C "gitadmin777@gmail.com"
    [user@client ~]$ scp ~/.ssh/id_rsa.pub user@server.example.org:/tmp/user.pub

    После копирования публичного ключа, авторизация пользователя git с админского хоста должна происходить без запроса пароля на сервере.

  • На сервере запускаем настройку. Инициализируем Gitolite своим ключом (этот пользователь будет администратором репозиториев)
    # sudo -u git -i
    $ gl-setup /tmp/user.pub
  • Инсталляция закончена. Остается выгрузить репозиторий gitolite-admin, в котором создаются новые репозитории. Создадим для примера новый репозиторий Test777
    [user@client ~]$ git clone gitolite@server.example.org:gitolite-admin
    $ cd gitolite-admin
    $ nano conf/gitolite.conf
    repo    gitolite-admin
            RW+     =   user
    
    repo    testing
            RW+     =   @all
    
    repo    test777
            RW+     =   user
            RW+     =   @all
    $ git add .
    $ git commit -am 'Added repo Test777'
    $ git push origin master

Управление Gitolite

  • Посмотреть какие репозитории доступны на сервере и какие права есть у вас для этих репозиториев:
$ ssh git@server.example.org info
hello user, this is gitolite 2.3-1 (Debian) running on git 1.7.10.4
the gitolite config gives you the following access:
     R   W 	gitolite-admin
    @R  @W 	test777
    @R_ @W_	testing
  • В отличии от gitosis в gitolite можно предварительно не создавать репозиторий через init, достаточно добавить его в конфигурационный файл.
  • @all — особая, предопределенная группа. Она описывает — в зависимости от контекста — всех аутентифицированных пользователей, или все репозитории.
  • Базовые права доступа в gitolite.conf:
    • R — позволяет чтение
    • RW — позволяет делать push в существующий ref или создавать новый ref
    • RW+ — позволяет делать «push -f» или удалять ref (т.е. уничтожать информацию)
    • -(минус) — запрещает доступ
  • Добавление нового пользователя. Перед добавлением нового пользователя создаем (получаем от него) его публичный ключ. После получения ключа, переименовываем его, что бы имя файла было похоже на имя_пользователя.pub. Скопируем ключ в директорию keydir. Отредактируем файл conf/gitolite.conf, для добавления нового репозитория, пользователя и прав доступа. Имена пользователей должны совпадать с имена файлов их публичных ключей, без расширения. Commit и push правок на сервер репозитория gitolite-admin.



git_i_gitolite.txt · Последние изменения: 2012/12/17 13:06 (внешнее изменение)