5

Доступ к репозиторию hg через ssh#

 3 years ago
source link: https://solovyov.net/blog/2008/sharing-hg-repo-through-ssh/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Доступ к репозиторию hg через ssh#

3 min read

·

hg, nix

Довольно долго для расшаривания репозиториев меркуриала мне хватало обычного доступа по HTTP: легко настроить (дал права пользователю веб-сервера - www-data, и всё), просмотреть, работает всё чётко и без запинки. Но в конце-концов достало меня раз за разом набирать пароль для заливания своих изменений в репозиторий, а так как единственным альтернативным вариантом при доступе через HTTP является запись пароля открытым текстом в hgrc локального репозитория, я решил поиграться с доступом по ssh.

Вообще доступ по ssh - тоже достаточно простая задача, если бы мне не хотелось оставить возможным для записи доступ по HTTP: получается, что мне нужно получить систему, при которой и я, и веб-сервер будем создавать файлы, в которые способен записывать каждый из нас.

Экшен!

Первым делом, конечно, пошёл в дело chmod:

find /path/to/repo -type d -exec chmod g+s {} \;

Теперь у всех новых файликов, создаваемых в репозитории1, группой-владельцем оказывается группа www-data, куда вхожу и я, и которой принадлежит репозиторий. Остаётся одна загвоздка - было бы хорошо, чтоб на эти новые файлы (на старых, естественно, такие права уже стоят) стояли права записи для группы.

Это достигается установлением umask 002 (777 - 002 = 775, что нам и нужно), который приносит маленькую проблему - кому хочется такое иметь по умолчанию для своего пользователя? Поэтому рисуется (за реализацию спасибо уходит Мартину в Уругвай - не знаю уж, как поставить на него ссылку и где он нашёл его - или сам придумал?) совсем маленький, но очень удаленький плагин для меркуриала:

import os
os.umask(0002)

И подключается, как обычно, в ~/.hgrc (того пользователя, под которым будет проходить соединение с сервером!):

[extensions]
sharedmask = ~/sharedmask.py

И всё, после этого можно пушить без опасений, что потом www-клиенты не смогут этого сделать. Естественно, чтоб пароль не просило, надо настроить логин по ключу - но это описано миллионы раз в интернетах, так что там и спросить можно. ;)

Шаг за шагом

Для тех, кому хочется поподробнее, ниже следует просто список команд (естественно, /path/to/repo и прочие штуки должны заменяться на адекватный аналог у вас ;). Считается, что это Дебиан (или его грязные копии ;)) - т.е. пользователем и группой HTTP-сервера является www-data, и ваш пользователь уже находится в этой группе.

$ chown -R www-data:www-data /path/to/repo
$ chmod -R u=rwX,g=rwX,o=rX /path/to/repo
$ find /path/to/repo -type d -exec chmod g+s {} \;
$ cat > ~/sharedmask.py << EOF
import os
os.umask(0002)
EOF
$ Вот здесь подключение sharedmask.py в ~/.hgrc
$ ln -s /path/to/repo ~/repo

Последняя строка чисто для сокращения пути, если репозиторий лежит не в домашней директории, как это сделано у меня. И, естественно, здесь не затронут вопрос подключения репозитория в веб-интерфейс.

P.S. Писалось всё по памяти, без экспериментов в реальном времени - надеюсь, что ошибок не допустил, вроде всё просто довольно. ;-)


  1. Речь, естественно, не про рабочую копию - её у репозитория нету ↩︎

May 2008


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK