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 настроены права к репозиториям то пользователь получит доступ к репозиториям на сервере.