Как создать сервер Git под Debian/Ubuntu GNU/Linux

Создание ssh-ключа


На клиентской машине нам понадобится создать ssh-ключ, для того чтобы мы могли с клиента авторизовываться при работе с репозиторием сервера. Кроме того, если вы планируете работать в группе, то каждый, кому понадобится работать с репой, тоже должен сделать себе ключ и отправить админу его публичную часть. Делается это при помощи утилиты ssh-keygen. Она уже встроена в ОС на базе GNU/Linux а также в MacOS. Если вы под Виндой и поставили на неё git, то она есть и у вас тоже. Просто запускаем её:

1
ssh-keygen

Попросит придумать пароль, можете оставить поле ввода пустым, если не хотите вводить его потом каждый раз (и уверены, что будете хранить ключ в безопасности). После этого утилита, покряхтев, создаст в вашем домашнем каталоге в папке .ssh два файла:id_rsa и id_rsa.pub.



Второй — это ваш публичный ключ, он-то нам и нужен. Загляните в ~/.ssh чтобы его найти. Если вы на Винде, то посмотрите в папке C:\Users\Username\.ssh

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

Создание ppk-ключа для TortoiseGit


Если вы на Винде и планируете пользоваться TortoiseGit, то нужно будет создать ещё и ppk-файл вашего ключа, потому что TortoiseGit не хавает ключи других форматов. Для этого вам понадобится прога PuTTYgen. Она не требует инсталляции. Скачайте и запустите. В меню выберите Conversions->Import Key и укажите ваш приватный ключ (id_rsa).



Вас спросят пароль, если вы вводили таковой при генерации вашего ключа.



После того как ваш ключ загрузится, нажмите Save private key и сохраните ваш .ppk-файл. На этом программу можно закрыть.

Теперь нужно указать TortoiseGit ваш ключ. Зайдите в настройки программы:



В настройках зайдите в Git->Remote и укажите путь к вашему ppk-файлу, укажите URL репозиторияи нажмите ОК:



После этого TortoiseGit больше не будет спрашивать у вас пароль и будет использовать для аутентификации ваш ключ.

Работы на сервере


Для аутентификации юзеров будем использовать методauthorized_keys. Нам нужен пользователь в системе для Гита, так и назовём его — git. У него в домашнем каталоге должна быть папка .ssh, куда мы будем складывать ключи для доступа.

Создаём юзера:
1
sudo adduser git

Переключаемся на него:
1
su git

Идём в его домашнюю папку:
1
cd

Делаем там папку .ssh:
1
mkdir .ssh

Далее нам надо добавить ключи тех пользователей, кому будет разрешено пользоваться гитом. Для этого нам нужны их публичные ключи. Предположим у нас в папке /tmp/ есть такой ключ под названием id_rsa.pub. Мы добавим его содержимое в конец файла ~/.ssh/authorized_keys:

1
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys

Если понадобится добавить ещё юзеров, аналогично добавляем их публичные ключи в конец файла ~/.ssh/authorized_keys

Теперь нам надо создать репозиторий. Вот я создал папку для него в /var/git/ (пользователь git при этом должен иметь право писать в /var/git/):

1
mkdir /var/git/testrepo.git

Идём в эту папку:

1
cd/var/git/testrepo.git

В ней создаём репозиторий, причём обязательно bare, то есть без рабочего каталога:
1
git --bare init

Работы на клиенте


Теперь у нас на сервере уже есть тестовый репозиторий, давайте попробуем его склонировать и что-нибудь туда запушить. Предполагается, что я сейчас на компе клиента нахожусь в папке, где хочу чтоб у меня был реп:
1
git clone git@mysite.ltd:/var/git/testrepo.git

При этом:

git (перед @) — имя пользователя гита, которого мы создавали на сервере. Он у нас так иназывается — git.
mysite.ltd — домен сервера, где хранится реп
/var/git/testrepo.git — абсолютный путь, где на серваке лежит реп

Если всё было сделано правильно, то у вас получится клон репа с сервера. Если у вас на локальной машине в папке ~/.ssh лежат файлы ключа, публичную часть которого мы записали на сервере в ~/.ssh/authorized_keys, то авторизация произойдёт без запроса паролей и т.д.

Если вы пользуетесь TortoiseGit, см. инструкцию выше.

Резюме


Чтобы создать новый репозиторий


Админ должен:


Коллега должен:


Чтобы добавить авторизованного сотрудника


Новый сотрудникдолжен:


Админ должен:



На заметку

Внимание!

Следует понимать, что добавление ключа в ~/.ssh/authorized_keys позволяет не только выполнять действия с репозиторием, но и выполнять действия от имени пользователя git вообще, в том числе и "ходить" по каталогам в операционной системе. Если вас этот вопрос беспокоит, следует дополнительно озаботиться проставлением соответствующих прав на каталоги, куда от имени пользователя git ходить нельзя. Либо сделать jail для него. И, залогинившись под пользователем git, убедиться, что из-под него нельзя сделать ничего, что бы вам не хотелось.

На этом, вроде, всё. Если я что-то упустил, сообщите в комментариях.

You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":
Яндекс.Метрика