Сегодня я расскажу как установить Git на сервере и клиенте. На клиентской машине установлена Ubuntu 10.04 LTS, на сервере - Debian 6 x86-64.
Клиентская часть
Итак делаем следующее:# add-apt-repository ppa:git-core/ppa
# apt-get update
# apt-get install git
Теперь сгенерим SSH-ключ для доступа по нему к Git репозиторию:
$ cd ~ $ ssh-keygen -t rsa
На все вопросы утилиты нажимаем "Enter", ничего вводить более не нужно. Все, связка публичного и приватного ключа сгенерирована. Она сохранена в ~/.ssh. Публичный ключ лежит в ~/.ssh/id_rsa.pub. Его содержимое будет в формате:
ssh-rsa AAAAB3NzaC1yc2EAAAADA.....v8JggJICUvax2T9va5 user@machine
Теперь осталось отредактировать e-mail и имя пользователя, которое будет использовать Git во время коммитов:
$ git config --global user.name "User Name"
$ git config --global user.email email@somemail.com
Настройка Git на клиентской машине закончена. Приступим к настройке сервера.
Серверная часть
# apt-get install gitСоздаем юзера git с помощью которого можно будет пользоваться репой:
# adduser git
# su git
$ cd
$ mkdir .ssh
Затем, нужно добавить открытый SSH-ключ некоторого разработчика в файл authorized_keys этого пользователя. Предположим, вы уже получили несколько ключей по электронной почте и сохранили их во временные файлы id_rsa.oleg.pub и id_rsa.max.pub. Их необходимо добавить в файл authorized_keys:
$ cat /tmp/id_rsa.oleg.pub >> ~/.ssh/authorized_keys
$ cat /tmp/id_rsa.max.pub >> ~/.ssh/authorized_keys
или так:
$ echo 'ssh-rsa ....ababbASFf1...... oleg@machine' >> ~/.ssh/authorized_keys
$ echo 'ssh-rsa ....fA78Hdff...... max@machine' >> ~/.ssh/authorized_keys
Теперь создаем Git репозиторий на сервере:
$ cd ~
$ mkdir myproject.git
$ cd myproject.git
$ git --bare init
Почему именно с опцией "--bare"? Согласно документации по Git:
Для того чтобы приступить к установке любого сервера Git, вы должны экспортировать существующий репозиторий в новый “голый” репозиторий, т.е. репозиторий без рабочего каталога. Обычно это несложно сделать. Чтобы склонировать ваш репозиторий и создать новый “голый” репозиторий, выполните команду clone с параметром --bare. По существующему соглашению, каталоги с голыми репозиториями заканчиваются на .git.Теперь перейдем к тонкой настройке сервера. Подстраиваем ssh демон:
# nano /etc/ssh/sshd_config
Раскомментируем строки:
PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys
Последним шагом будет более секьюрная настройка на сервере. В качестве дополнительной меры предосторожности можно ограничить возможности пользователя "git" только действиями связанными с Git с помощью ограниченной оболочки git-shell поставляемой вместе с Git. Если вы выставите ее в качестве командного интерпретатора пользователя "git", то этот пользователь не сможет получить доступ к обычной командной оболочке на вашем сервере. Чтобы её использовать, укажите git-shell, вместо bash или csh в качестве командной оболочки пользователя. Для этого вы должны отредактировать файл /etc/passwd:
# nano /etc/passwd
В конце вы должны найти строку, похожую на эту:
git:x:1000:1000::/home/git:/bin/sh
Замените /bin/sh на /usr/bin/git-shell (или запустите:
$ which git-shell
чтобы проверить, куда он установлен). Отредактированная строка должна выглядеть следующим образом:
git:x:1000:1000::/home/git:/usr/bin/git-shell
Теперь, пользователь "git" может использовать SSH соединение только для работы с репозиториями Git, и не может зайти на машину. Вы можете попробовать и увидите, что вход в систему отклонен:
$ ssh git@server_url.com
fatal: What do you think I am? A shell? Connection to server_url.com closed.
В следующей статье я расскажу как настроить оповещатель на e-mail о push'ах.
Комментариев нет:
Отправить комментарий