Как создать сервер Git под Debian/Ubuntu GNU/Linux
Создание ssh-ключа
На клиентской машине нам понадобится создать ssh-ключ, для того чтобы мы могли с клиента авторизовываться при работе с репозиторием сервера. Кроме того, если вы планируете работать в группе, то каждый, кому понадобится работать с репой, тоже должен сделать себе ключ и отправить админу его публичную часть. Делается это при помощи утилиты ssh-keygen. Она уже встроена в ОС на базе GNU/Linux а также в MacOS. Если вы под Виндой и поставили на неё git, то она есть и у вас тоже. Просто запускаем её:
Попросит придумать пароль, можете оставить поле ввода пустым, если не хотите вводить его потом каждый раз (и уверены, что будете хранить ключ в безопасности). После этого утилита, покряхтев, создаст в вашем домашнем каталоге в папке .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, куда мы будем складывать ключи для доступа.
Создаём юзера:
Переключаемся на него:
Идём в его домашнюю папку:
Делаем там папку .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
|
Идём в эту папку:
В ней создаём репозиторий, причём обязательно bare, то есть без рабочего каталога:
Работы на клиенте
Теперь у нас на сервере уже есть тестовый репозиторий, давайте попробуем его склонировать и что-нибудь туда запушить. Предполагается, что я сейчас на компе клиента нахожусь в папке, где хочу чтоб у меня был реп:
1 | git clone git@mysite.ltd:/var/git/testrepo.git
|
При этом:
git (перед @) — имя пользователя гита, которого мы создавали на сервере. Он у нас так иназывается — git.
mysite.ltd — домен сервера, где хранится реп
/var/git/testrepo.git — абсолютный путь, где на серваке лежит реп
Если всё было сделано правильно, то у вас получится клон репа с сервера. Если у вас на локальной машине в папке ~/.ssh лежат файлы ключа, публичную часть которого мы записали на сервере в ~/.ssh/authorized_keys, то авторизация произойдёт без запроса паролей и т.д.
Если вы пользуетесь TortoiseGit, см. инструкцию выше.
Резюме
Чтобы создать новый репозиторий
Админ должен:
- Создать папку для будущего репа:
mkdir /var/git/foo.git
cd/var/git/foo.git
- В ней инициализировать репозиторий с опцией bare:
git --bare init
- Сообщить коллегам адрес нового репа, который будет выглядеть так:
git@mysite.ltd:/var/git/foo.git
Где:
git (перед @) — имя пользователя гита, в нашем случае — git.
mysite.ltd — домен сервера, где хранится реп
/var/git/foo.git — абсолютный путь, где на серваке лежит реп
Коллега должен:
- Создать папку под будущий реп.
- Клонировать реп туда:
git clonegit@mysite.ltd:/var/git/foo.git
(через консоль либо через git-клиент, например, TortoiseGit)
Чтобы добавить авторизованного сотрудника
Новый сотрудникдолжен:
- Создать себе ssh-ключ при помощи утилитыssh-keygen и, если собирается пользоваться TortoiseGit, создать ещё и ppk-ключ при помощи программы PuTTYgen(как это сделать см. выше)
- Отправить свой публичный ключ (лежит в ~/.ssh/id_rsa.pub) админу.
Админ должен:
- Добавить публичный ключ коллеги в authorized_keys пользователя git на сервере:
(от имени пользователя git, предполагается, что/tmp/id_rsa.pub — публичный ключ, присланный коллегой)
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
Внимание!
Следует понимать, что добавление ключа в ~/.ssh/authorized_keys позволяет не только выполнять действия с репозиторием, но и выполнять действия от имени пользователя git вообще, в том числе и "ходить" по каталогам в операционной системе. Если вас этот вопрос беспокоит, следует дополнительно озаботиться проставлением соответствующих прав на каталоги, куда от имени пользователя git ходить нельзя. Либо сделать jail для него. И, залогинившись под пользователем git, убедиться, что из-под него нельзя сделать ничего, что бы вам не хотелось.
На этом, вроде, всё. Если я что-то упустил, сообщите в комментариях.
You can leave a comment with "Facebook":
Не забывайте оставлять комментарии при помощи "ВКонтакте":