Pull to refresh

Установка Mercurial Server и использование авторизации по SSH

Reading time 2 min
Views 32K
Несколько дней назад передо мной поставили задание — поднять mercurial-репозиторий на одной из локальных машин, и поставили одно условие — обязательная авторизация по SSH. Установка будет производится с использованием Mercurial Server на 64-битной серверной Убунте.

Установка Mercurial Server


Первым, что пришло в голову — была установка из репозиториев. Обновив пакеты и выполнив команду:
apt-get install -y mercurial-server

я обнаружил, что установилась версия 1.0.1-1, которая не является последней.
На официальном сайте был обнаружен deb-пакет с версией 1.2-1, который и был установлен командой
dpkg -i mercurial-server_1.2-1_all.deb


Настройка SSH для авторизации по ключам


Т.к. я хотел, чтобы все ключи пользователей, которые имеют доступ к серверу по ssh, хранились в одном месте, то в файл /etc/ssh/sshd_config была добавлена следующая строчка:
AuthorizedKeysFile /etc/ssh/keys/%u.pub
Она означает, что файлы ключей должны храниться в папке /etc/ssh/keys/ и иметь вид имя_пользователя.pub

Настройка Mercurial Server


Домашняя директория с конфигами Mercurial Server находится в /var/lib/mercurial-server. Нас интересует файл .mercurial-server, именно в нем хранится основной конфиг сервера. Там можно изменить пути к репозиториям, директории с публичными ключами и др. Т.к. репозитории у меня вынесены на другой диск, то и переменную repos я изменил соответствующим образом.
Пользователи делятся на две группы: root(имеют полные права на все репозитории, в том числе и на создание) и users(имеют право на pull и push).
Ключи пользователей, которые должны иметь доступ к серверу необходимо поместить в папку /etc/mercurial-server/keys/users, а ключи администраторов — /etc/mercurial-server/keys/root.

Специальный репозиторий hgadmin

После установки сервера автоматически создается служебный репозиторий hgadmin, в котором можно хранить ключи пользователей и администраторов. Это очень удобно, т.к. нет необходимости загружать в ручную ключи пользователей.
Структура точно такая же, как и в системе, т.е. ключи хранятся в /hgadmin/keys/users и /hgadmin/keys/root для пользователей и администраторов соответственно.
Там же можно хранить файл access.conf который отвечает за права доступа пользователей.

Окончательная настройка


Так как по умолчанию ключи для доступа к пользователю hg хранятся в ~/.ssh/authorized_keys нам нужно создать символическую ссылку в каталоге /etc/ssh/keys/. Для этого выполняем команду:
 ln -s /var/lib/mercurial-server/.ssh/authorized_keys /etc/ssh/keys/hg.pub


После того, как мы поместили ключ в /etc/mercurial-server/keys необходимо обновить права доступа, для этого необходимо выполнить следующую команду:
sudo -u hg /usr/share/mercurial-server/refresh-auth

Если ключи были добавлены с помощью hgadmin, то изменения вступают в силу автоматически.

Доступ к репозиторию с помощью TortoiseHg


Первым делом необходимо скачать Pageant, он будет передавать TortoiseHg приватный ключ в случае необходимости. Для удобства мною был написан bat'ник, который запускается при старте системы. Его смысл в том, чтобы добавить приватный ключ в Pageant.
start pageant.exe node.ppk

После запуска pageant'а всё, что остается — это склонировать репозиторий.
Клонируем специальный репозиторий hgadmin командой:
hg clone ssh://hg@server/hgadmin

Создать новый репозиторий можно командой:
hg init ssh://hg@server/myrep

Полезные ссылки

Tags:
Hubs:
+19
Comments 20
Comments Comments 20

Articles