NERIS tLog

NERIS tLog


  • Установка gitolite на cygwin или git-сервер с шифрованием и разделением прав под windows

    Понадобилось мне поднять на вендовой тачке гит-сервер для тестов. Да не простой, а с шифрованием и мощным разделением прав. Погуглив, нашел идеальное для меня решение — gitolite. Был еще gitosis, но у него с правами было не густо.

    Проблема в том, что для gitolite нужен ssh-сервер и UNIX-like система. Но не беда. Было решено поднимать это чудо при помощи cygwin, с которым мне уже приходилось сталкиваться не раз и не два.

    Итак, кому интересно как такое сделать, прошу под кат.



    Устанавливаем cygwin

    Для работы нам понадобится cygwin с пакетами git и openssh. Я не буду рассказывать как установить сигвин. В сети и так полно гайдов, не считая официального. Просто не забудьте при установке добавить два вышеперечисленных пакета.



    Поднимаем ssh-сервер

    Для безопасной и удобной работы с гит-сервером, нужно настроить ssh. Именно через него будет происходить авторизация пользователей и шифрование трафика.

    Запускаем Cygwin Bash Shell (тыць одноименных значок в пуске).

    Внимение! Cygwin использует юзеров из венды. Поэтому, запускать его нужно от имени пользователя с правами администратора. Если у пользователя не будет прав админа, службу sshd будет невозможно создать. Но админ-права нам нужны только для создания службы и поэтому, можно дать права админа юзеру только на время установки.

    Допустим, пользователь, от коротого вы запустили cygwin называется “gitserveruser”. Тогда в cygwin в папке /home появится директория gitserveruser. Запомните это имя на будущее.

    Примем некоторые условные обозначения:

    gitserveruser — Имя пользователя, от коротого запускаем cygwin

    gitserver — IP-адрес или домен сервера, на котором будет git-сервер

    gitclientuser — Имя пользователя в системе, в которой запускается Git Bash

    gitclient — IP-адрес или домен сервера, на котором запускается Git Bash

    В командной строке cygwin пишем:

    $ ssh-host-config

    и жмем энтер.

    (Надеюсь, вы знаете, что знак $ по традиции означает ввод в консоль и его набирать не нужно).

    Вдим:

    
    	*** Info: Generating /etc/ssh_host_key
    	*** Info: Generating /etc/ssh_host_rsa_key
    	*** Info: Generating /etc/ssh_host_dsa_key
    	*** Info: Creating default /etc/ssh_config file
    	*** Info: Creating default /etc/sshd_config file
    	*** Info: Privilege separation is set to yes by default since OpenSSH 3.3.
    	*** Info: However, this requires a non-privileged account called 'sshd'.
    	*** Info: For more info on privilege separation read /usr/share/doc/openssh/READ
    	ME.privsep.
    	*** Query: Should privilege separation be used? (yes/no)
    

    Отвечаем “yes”

    Видим:

    
    	*** Info: Updating /etc/sshd_config file
    
    
    	*** Warning: The following functions require administrator privileges!
    
    	*** Query: Do you want to install sshd as a service?
    	*** Query: (Say "no" if it is already installed as a service) (yes/no)
    

    Отвечаем “yes”

    Видим:

    
    	*** Query: Enter the value of CYGWIN for the daemon: []
    

    Отвечаем “binmode tty ntsec”

    Видим:

    
    	*** Info: The sshd service has been installed under the LocalSystem
    	*** Info: account (also known as SYSTEM). To start the service now, call
    	*** Info: `net start sshd' or `cygrunsrv -S sshd'.  Otherwise, it
    	*** Info: will start automatically after the next reboot.
    
    	*** Info: Host configuration finished. Have fun!
    

    Все! На этом конфигурация ssh-демона закончена. Теперь он появится в списке служб Windows и его можно запустить.

    Далее меняем пароль у нашего юзера в cygwin:

    $ passwd

    И дважды вводим новый пароль. Он временный. Потом его можно будет удалить.

    После этого, через Пуск > Панель управления > Администрирование > Службы запускаем службу “CYGWIN sshd”.



    Настройка админского соединения с ssh

    Теперь представим, что установленный нами cygwin - это сервер, к которому у нас есть доступ по ssh.

    Запускаем Git Bash (надеюсь, вы msysgit уже установили, иначе зачем вам гит-сервер) и вводим следующее:

    $ ssh-keygen -t rsa

    И на все вопросы жмем энтер (это означает, что мы не хотим изменять положение файла и не хотим устанавливать контрольную фразу). Увидим примерно следующее:

    
    	Generating public/private rsa key pair.
    	Enter file in which to save the key (/c/Documents and Settings/gitclientuser/.ssh/id_rsa
    	):
    	Created directory '/c/Documents and Settings/gitclientuser/.ssh'.
    	Enter passphrase (empty for no passphrase):
    	Enter same passphrase again:
    	Your identification has been saved in /c/Documents and Settings/gitclientuser/.ssh/id_rs
    	a.
    	Your public key has been saved in /c/Documents and Settings/gitclientuser/.ssh/id_rsa.pu
    	b.
    	The key fingerprint is:
    	************************************************************* gitclientuser@gitclient
    

    За исключением разве того, что имя пользователя и компьютера будет ваше.

    А теперь нам нужно передать серверу наш ключ, чтобы авторизироваться без пароля:

    В Git Bash вводим (помним, что gitserver - адрес компьютера, на котором запущен sshd, можно localhost; gitserveruser - имя пользователя, из-под которого запускали cygwin):

    $ ssh-copy-id -i ~/.ssh/id_rsa gitserveruser@gitserver

    Я нарочно сделал это так, как нужно было бы делать при обмене ключами с реальным сервером. Это можно было бы сделать напрямую в винде, но так не интересно =)

    Теперь нам можно удалить пароль пользователя, чтобы на ssh можно было заходить только при помощи ключей:

    В Cygwin Bash Shell вводим passwd и два раза нажимаем энтер чтобы установить пустой пароль.

    Чтобы проверить, работает ли авторизация по ключам, в клиенте (Git Bash) вводим:

    $ ssh gitserveruser@gitserver pwd

    После этого у нас НЕ должны спрашивать пароль, а просто показать путь к домашней директории сервера:

    /home/gitserveruser

    Все. На этом установка и настройка ssh-сервера и обмен ключами закончен. Переходим к установке gitolite:



    Установка gitolite

    Открываем Git Bash и переходим в временную папку:

    $ cd d:/tmp

    После этого, клонируем репозиторий с гитолайтом, чтобы его потом установить:

    $ git clone git://github.com/sitaramc/gitolite.git

    Когда он закачается, у вас в временной папке появится папка gitolite.

    Далее начинаем установку:

    $ cd gitolite/src
    $ ./gl-easy-install -q gitserveruser gitserver sitaram

    Где gitserveruser - наш пользователь в cygwin, а gitserver - адрес компьютера, на котором он запущен, напрмер localhost. sitaram - имя администратора gitolite. Его можно изменить, а лучше не трогать.

    После ввода команды, нас попросят ввести проверочную фразу для sitaram. Ее можно не вводить а просто нажать энтер.

    Все, гитолайт установлен. Теперь нужно подправить один баг, связанный с cygwin:

    В папке вашего пользователя в cygwin откройте файл .bashrc и добавьте в конец следующие строки:

    
    	export GL_RC=~/.gitolite.rc
    	export GL_BINDIR=~/.gitolite/src
    	export GL_REPO=gitolite-admin
    	export GL_USER=gitserveruser
    	export GL_TS="$y-$m-$d.$h:$min:$s"
    

    Не забываем заменить gitserveruser на имя пользователя в cygwin.

    Если все равно возникают странные баги, попробуйте добавить строку

    $ENV{PATH} = "/usr/local/bin:/bin:/usr/bin";

    в самый верх файла ~/.gitolite.rc на сервере, это должно помочь.

    Теперь можно удалить из временной папки папку gitolite.

    После этого, клонируем себе админский репозиторий для дальнейшей настройки:

    В Git Bash переходим во временную папку и вводим:

    $ git clone gitolite:gitolite-admin.git

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

    Вам нужно только помнить: вы можете получить доступ к репозиториям при подключении такого вида:

    $ git clone gitolite:testing.git

    А все остальные будут подключаться например так:

    $ git clone gitserveruser@gitserver:testing.git

    Все, все остальное вы найдете в доках gitolite!

    Опубликовано 1 год назад

    Comments

    Метки: [coding] [git] [gitolite]

Мой сайт →
Подписаться
Спросите меня!

Популярные метки

  • Музыка
  • Юмор

©2010. Postage by Greg Cooper. Icons by P.J. Onori. Thanks to Jamie Cassidy & Panic.

Edited by Neris