Как организовать локальный сервер git? (возможно через доступ по ssh)
Суть: есть машина с несколькими пользователями. Необходимо создать репозиторий git для этих пользователей, который бы находился на этой же машине (даже на том же диске). Вариант использовать локальный протокол не устраивает, т.к. вижу при этом два похожих варианта развития:
- если разрешить rwc* всех пользователей к репозиторию, то юзеры могут изменить сам репозиторий (имею ввиду не через push, а прямым доступом);
- если создать отдельного пользователя и только он имел право rwc репозитория, тогда ему нужно будет также дать права на rwc home-ов реальных пользователей, а это тоже чревато. Если тут я ошибаюсь - прошу поправить :)
Доступ по ssh к репозиторию мне кажется наиболее защищенным в этом плане, т.к. и пользователь с сервера, и локальные пользователи не могут навредить кому-либо. Однако не знаю, можно ли организовать доступ к локальной папке через ssh. В гугле ничего не нашел по этому вопросу.
*rwc - чтение-запись-модификация
Ответы (2 шт):
Посмотрите на Gitea или Gogs. Минимальные усилия и у Вас будет сервер, который решит 99% задач для маленькой компании. Эти сервера можно развернуть даже на локальной машине или на рядом лежащей Raspberry Pi. На линукс сервере все подымается быстро и легко (особенно в докере). Дает хорошие возможности по администрированию и управлению.
Но если очень хочется, то можно и полноценный Gitlab развернуть. Но это перебор.
помимо уже перечисленных огромных программ gitea и gogs стоит упомянуть и минималистичный gitolite (в отличие от упомянутых, он опакетирован во многих дистрибутивах, например, в debian gnu/linux под именем gitolite3).
но для «внутреннего упонтребления», если не требуется разграничения доступа к хранилищам, можно обойтись и вообще без установки дополнительных программ (сервер openssh стоит рассматривать как присутствующий по умолчанию).
создайте пользователя. например,
tig(домашний каталог — по умолчанию —/home/tig, пароль на ваш вкус):$ sudo adduser tigэто для дистрибутива debian gnu/linux и «наследников». в вашем дистрибутиве процедура создания пользователя может отличаться. см. документацию к дистрибутиву.
от имени этого пользователя создайте bare-хранилище:
$ sudo -u tig git init --bare /home/tig/repo1создайте для этого пользователя каталог
~/.sshи файлauthorized_keysв нём (с соответствующими правами доступа и принадлежностью):$ sudo -u tig mkdir /home/tig/.ssh $ sudo -u tig touch /home/tig/.ssh/authorized_keys $ sudo chmod -R go= /home/tig/.sshдобавьте публичный ключ разработчика в созданный файл, только в начале строки с ключом вставьте такой текст:
command="read c r o < <(echo \"$SSH_ORIGINAL_COMMAND\");case $c in git-upload-pack|git-receive-pack)eval $c $r;;*)exit 1;;esac"в конце этой строки должен быть пробел, чтобы полный текст ключа выглядел так (команду и содержимое ключа я заменил многоточиями для наглядности):
command="..." ssh-rsa ...в виде однострочника (не забудьте подставить актуальный путь и имя файла с добавляемым публичным ключом):
$ (printf 'command="read c r o < <(echo \\"$SSH_ORIGINAL_COMMAND\\");case $c in git-upload-pack|git-receive-pack)eval $c $r;;*)exit 1;;esac" '; cat файл.с.публичным.ключом) | sudo tee -a /home/tig/.ssh/authorized_keysчто это за
command=? а это такая уличная магия программы openssh. подробности смотрите в документации.
собственно, теперь всё. можете клонировать созданное хранилище, выполнять push и pull (от имени того пользователя, которому принадлежит секретная часть ключа):
$ git clone tig@localhost:repo1
понятно, что если команда выполняется на другом компьютере, вместо localhost надо подставить имя/ip-адрес того компьютера, где вы создавали пользователя tig.
чтобы создать новое хранилище, повторите шаг два, указав новое имя каталога.
чтобы добавить новый ключ, повторите шаг четыре.