Установка и настройка git сервера, средства управления репозиториями gitolite. Создание первого репозитория, пользователя и группы. Генерирование пользовательских ключей.
Краткое описание GIT, взято с Хабра:
Особенность настройки gitolite заключается в том, что почти никакие операции по его настройке НЕ ПРОИЗВОДЯТСЯ НАПРЯМУЮ НА СЕРВЕРЕ. Чтобы добавить нового пользователя, репозиторий или изменить права доступа надо сделать git clone специального gitolite-admin репозитория, внести изменения и сделать git push. Дело в том, что gitolite использует целую систему хуков, чтобы эти изменения вступили в силу.
Gitolite работает поверх ssh с использованием аутентификации через public-key (точнее, это наиболее популярная конфигурация).На сервере заводится единственный реальный пользователь, через которого будет происходить работа с репозиториями. А «магия» gitolite заключается в том, что в authorized_keys эти ключики попадают с опцией «command=[path]/gl-auth-command ...». Эта опция предписывает ssh-серверу запускать указанную команду независимо от того, что реально хотел исполнить юзер. При этом оригинальная команда сохраняется в переменной SSH_ORIGINAL_COMMAND, которую и считывает gitolite, чтобы узнать, что от него хотели.
Сервер на котором настраивается репозиторий назовем domain.com. Описание приводится для *.deb подобного дистра, но по сути разницы нет.
Установка GitoLite и GIT
Поставить GitoLite и сам GIT:
aptitude install git gitolite
Создать пользователя git, зайти под ним в консоль, перейти в домашний каталог и сгенерировать ssh ключ:
adduser git su git cd ssh-keygen
На предложение ввести passphrase
просто жать enter, иначе каждый раз придется его вводить при авторизации по этому ключу. В домашней директории должен появиться каталог .ssh
с публичным и приватным ключами (id_rsa
и id_rsa.pub
). Под ними будут авторизироваться на сервере все клиенты git'а.
Скопировать публичный ключ, переименовав его в git.pub
:
cp ~/.ssh/id_rsa.pub ~/.ssh/git.pub
Инициализировать gitolite созданным ключом пользователя git, который будет администратором репозиториев:
gl-setup ~/.ssh/git.pub
Консоль ответит:
The default settings in the rc file (/home/git/.gitolite.rc) are fine for most people but if you wish to make any changes, you can do so now. hit enter...
И выдаст файл настроек gitolite в vim (блять, в vim!?!?!?), для выхода нажать :x
Далее завершение инициализации:
creating gitolite-admin... Initialized empty Git repository in /home/git/repositories/gitolite-admin.git/ creating testing... Initialized empty Git repository in /home/git/repositories/testing.git/ [master (root-commit) 01835fa] start 2 files changed, 6 insertions(+) create mode 100644 conf/gitolite.conf create mode 100644 keydir/git.pub
Установка закончена. В домашнем каталоге пользователя git создан каталог repositories, в котором уже содержатся два репозитория gitolite-admin.git и testing.git. Тут же будут храниться все будущие репы.
Теперь надо разрешить пользователю git коннектиться к серверу по протоколу SSH и перезапустить демон OpenSSH:
echo AllowUsers git >> /etc/ssh/sshd_config /etc/init.d/ssh restart
На этом установка и настройки непосредственно на сервере закончены.
Первый коннект и клонирование репозитория
Чтобы создать новый репозиторий и начать им пользоваться необходимо скопировать приватный ключ пользователя git (id_rsa, созданный вначале) на клиентскую машину и с помощью Putty Key Generator импортировать его, т.к. Pageant (Агент аутентификации) не понимает формат OpenSSH:
В Git Extentions запустить Putty Key Generator: (Меню\Удаленные\Putty\Генерировать или импортировать ключ), в открывшемся окне Putty Key Generator пройти в Меню\Conversions\Import key(выбрать скопированный с сервера файл id_rsa)\Save private key, назвать git.ppk
Далее запустить Pagent (Меню\Удаленные\Putty\Запустить агент аутентификации), добавить в агент импортированный ключ git.ppk. Теперь можно первый раз коннектиться к GITу и добавить новые репозитории и пользователей.
Клонируем реп с настройками:
В Git Extentions клонируем репозиторий
[email protected]:gitolite-admin.git
Тут стоит обратить внимание, что префикс git@
- это и есть имя системного пользователя под которым проходит авторизация на сервере по протоколу SSH.
После клонирования видно, что выкачанный репозиторий содержит в себе два каталога:
keys
- файлы с публичными ключами пользователей репозитория (сюда же при инициализации скопирован ключ git.pub, с помощью которого и будут коннектиться пользователи на SSH сервер)
conf
- содержит файл gitolite.conf
- описание конфигурации, распределения прав и другие настройки.
Собственно все, сервер GITа установлен и готов к работе, осталось завести новые репы и пользователей
Добавление нового репозитория и пользователей
Управление всеми изменениями GIT'а происходит через специальный gitolite-admin репозиторий, напрямую на сервере ни чего делать не надо.
Клонирование:
Для этого надо иметь права на редактирование репозитория gitolite-admin, клонировать репозиторий [email protected]:gitolite-admin.git
на локальную машину.
Для добавление нового пользователя скопировать пользовательский сгенерированный публичный ключ, при помощи Putty Key Generator, в формате username.pub в каталог keydir выкачанного репозитория.
Добавление нового репозитория и назначение прав осуществляется путем редактирования файла conf\gitolite.conf, добавив в него блок:
#Добавление групп и пользователей в группах (Этим создаются новые группы groupname_1 и groupname_2, включающая пользователей username_1, username_2 и username_3, username_4 соответственно.) @groupname_1 = username_1 username_2 @groupname_2 = username_3 username_4 #Добавление нового репа repo projectname #Права групп на реп RW+ = @groupname_1 RW = @groupname_2
где
projectname - название проекта\нового репозитория
@groupname_1 - название группы для доступа к репу projectname с правами RW+
@groupname_2 - название группы для доступа к репу projectname с правами RW
username_1 - имя пользователя, по названию ключа username_1.pub
R - позволяет чтение
RW - позволяет делать push в существующий реп или создавать новый реп
RW+ - позволяет делать «push -f» или удалять реп (т.е. уничтожать информацию)
- (минус) - запрещает доступ
Закоммитить изменения в реп:
Открыть реп, нажать на кнопку commit, в появившемся окне слева нажать Stage(all), описать коммит и Commit&push
В конечном итоге файл gitolite.conf примет следующий вид:
@gitoliteadmin = git @groupname_1 = username_1 username_2 @groupname_2 = username_3 username_4 repo gitolite-admin RW+ = @gitoliteadmin repo testing RW+ = @all repo projectname_1 RW+ = @groupname_1 RW = @groupname_2
Все готово.
Теперь новый репозиторий находится по адресу [email protected]:projectname.git
Генерация пользовательских ключей
При помощи Putty Key Generator сгенерировать ключ со следующими параметрами:
Тип ssh2-rsa
Битность 2048
Должно получиться 2 файла:
Приватный ключ получается нажатием кнопки "Save private key" > username.ppk
Публичный ключ необходимо скопировать в Putty Key Generator из окна сверху и сохранить одной строчкой в файл > username.pub, который и надо копировать в каталог /keydir.
Паролей ни каких не вводить!!!
Пример правильного формата публичного ключа:
ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQBPFuT4oag106Q5DtrP52NJ8fplt8FrTubU1nhgU//abFehe1ojEexP/T91/NW6pTmU9QoDy0csJtkZScyKYM8XMNAKRIlToaP72iboROjtQ2uziIpEyBg9eaqR6cT5Zkv95ZMZs5oHUF+JJEvx44aNKu7ABKZ6pyrWiwpoIZeUdfVePHNGoJFHDfikJ5whjUxH/1gUgEAoTRgOgEcp3DCToT3gWNJbRFPdKmyGjqu6vUJTVQxoUBoB05lreEYf7Oc/6WYPsGFgjvOJRTS2qQIYAcKype+j4wJJTLst6lBdGhEML8cRRNbtgJTwewOJvCHhMS/0M6veCAXclN19XpI7 rsa-key-20130815
Пример не правильного формата публичного ключа
---- BEGIN SSH2 PUBLIC KEY ---- Comment: "rsa-key-20130815" AAAAB3NzaC1yc2EAAAABJQAAAQBPFuT4oag106Q5DtrP52NJ8fplt8FrTubU1nhg U//abFehe1ojEexP/T91/NW6pTmU9QoDy0csJtkZScyKYM8XMNAKRIlToaP72ibo ROjtQ2uziIpEyBg9eaqR6cT5Zkv95ZMZs5oHUF+JJEvx44aNKu7ABKZ6pyrWiwpo IZeUdfVePHNGoJFHDfikJ5whjUxH/1gUgEAoTRgOgEcp3DCToT3gWNJbRFPdKmyG jqu6vUJTVQxoUBoB05lreEYf7Oc/6WYPsGFgjvOJRTS2qQIYAcKype+j4wJJTLst 6lBdGhEML8cRRNbtgJTwewOJvCHhMS/0M6veCAXclN19XpI7 ---- END SSH2 PUBLIC KEY ----
На моей памяти, примерно из 100 человек, с первого раза правильно сгенерировали ключ только двое. Это при наличии подробной инструкции со скриншотами и факта, что все сто - ITшники (разрабы, тестировщики, аналитики, верстальщики и прочие менеджеры).