Gitosis + git настройка


Документация устарела


Gitosis — удобное средство, позволяющее управлять Git репозиториями, используя один пользовательский аккаунт, управляя доступом пользователей к репозиториям на основе ssh-ключей.

Gitosis стремится сделать хостинг Git репозиторий проще и безопаснее. Он управляет несколькими репозиториями под одной учетной записью пользователя, с использованием SSH ключей для идентификации пользователей. Конечным пользователям не нужны учетные записи на сервере, они будут входить через один общий аккаунт, который не позволит им запускать произвольные команды.

Установка gitosis

Если пакет замаскирован, размаскируйте его.

emerge gitosis

После установки будет создан пользователь git (пароль отсутствует, домашняя директория /var/spool/gitosis/)

Настройка gitosis

Создаем ключ для root

su
ssh-keygen -t rsa

Будут созданы два файла:

/root/.ssh/id_rsa.pub 
/root/.ssh/id_rsa

Публичный и закрытый rsa ключи

Создаем репозиторий с настройками

Копируем открытый ключ

cp /root/.ssh/id_rsa.pub /tmp/id_rsa.pub

Создаем репозиторий

su git
cd
gitosis-init <  /tmp/id_rsa.pub

Удаляем из /tmp открытый ключ

rm /tmp/id_rsa.pub

Если планируется использовать git-web, для того чтобы, репозиторий с настройками был не виден в web изменим права на директорию

chmod 700 /var/spool/gitosis/repositories/gitosis-admin.git

Настраиваем репозиторий для пользователя

Переходим в /tmp

cd /tmp

Клонируем директорию с настройками

git clone git@имя_сервера:gitosis-admin.git

Переходим в директорию с настройками

cd gitosis-admin

Копируем пользовательский открытый ключ в директорию /tmp/gitosis-admin/keydir

scp root@имя_клиентского_компьютера:/home/имя_пользователя/.ssh/id_rsa.pub ./keydir/имя_пользователя@имя_клиентского_компьютера.pub

Настраиваем новый репозиторий для пользователя имя_пользователя

vi gitosis.conf

файл до изменения

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = root@имя_сервера

файл после изменения

[gitosis]

[group gitosis-admin]
writable = gitosis-admin
members = root@имя_сервера

[group group1]
writable = project1
members = root@имя_сервера имя_пользователя@имя_клиентского_компьютера

Делаем commit для настроек

git commit -am "Granted access for developer@remotehost to project1" 

Записываем репозиторий с настройками

git push origin master

Создаем новый репозиторий

cd /var/spool/gitosis/repositories
mkdir project1.git
cd project1.git
git --bare init

Этот репозиторий будет доступен пользователю на его компьютере через ssh

git clone ssh://git@имя_сервера/project1.git

без ввода пароля (по открытому ключу)

Проверка sshd

Демон sshd должен быть запущен.

Должен быть разрешен доступ по ssh пользователю git файл /etc/ssh/sshd_config

Настройка git-daemon

vi /etc/conf.d/git-daemon

GITDAEMON_OPTS="--syslog --port=9418 --base-path=/var/spool/gitosis/repositories/ --export-all" 
GIT_USER="apache" 

Если будут проблемы при перезапуске меняем номер порта --port=9418 на другой номер перезапускаем демона git, меняем обратно перезапускаем демона git.

/etc/init.d/git-daemon restart

Проблема перезапуска git-daemon

При перезапуске демона может возникнуть проблема повторного открытия порта, в /var/log/message она записывает как

git-daemon[pid]: unable to allocate any listen sockets on host (null) port 9418

Чтобы ее избежать необходимо добавить в GITDAEMON_OPTS параметр --reuseaddr

Создание пользовательского ключа

В сеансе пользователя, на пользовательском компьютере.

ssh-keygen -t rsa

В пользоваетельской директории .ssh будут созданы два ключа

id_rsa
id_rsa.pub

закрытый и публичный (pub)

Если публичный ключ записан в директорию keys репозитория настроек gitosis на сервере, а также в файле gitosis.conf настроены права к репозиториям то пользователь получит доступ к репозиториям на сервере.

Спасибо!