Я установил сервер Mercurial на машине с Linux, и он отлично работает. Пользователи могут, например, нажимать и тянуть к нему, используя что-то вроде:
hg push ssh://...
Пользователи также могут подключиться к серверу по ssh.
Для некоторых пользователей я бы хотел ограничить доступ, чтобы они могли получить доступ только к Mercurial.
Как мне это сделать?
Вы действительно спрашиваете этот. Это именно то, что Gitorious делает для git - он запускается через command=
запись в файле ключей ssh и гарантирует, что с помощью ключа ssh могут выполняться только операции git. Связанный вопрос касается программного обеспечения, подобного Gitorious, для Mercurial. Не будучи пользователем Mercurial, я не могу комментировать качество ответов.
Mercurial поставляется со сценарием именно для этого! Использовать contrib/hg-ssh
скрипт, который мы предоставляем для ограничения команд. Файл содержит этот заголовок, чтобы объяснить, как его использовать:
Для использования в
~/.ssh/authorized_keys
сcommand
вариант, см. sshd (8):command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...
(возможно, вместе с этими другими полезными опциями:
no-port-forwarding
,no-X11-forwarding
,no-agent-forwarding
)Это позволяет передавать / передавать SSH из / в репозитории, указанные в качестве аргументов. Если все ваши репозитории являются подкаталогами общего каталога, вы можете разрешить более короткие пути с помощью:
command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2"
Вы можете использовать сопоставление с образцом вашей обычной оболочки, например:
command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}"
Вы можете изменить директиву /etc/security/access.conf, чтобы разрешить вход только определенным пользователям, и никаким другим.
Строка будет выглядеть примерно так, но с вашими локализованными группами / пользователями:
-:ALL EXCEPT your_group your_user1 your_user2 :ALL
Или, если у вас есть определенная группа, вы хотите внести в черный список определенных пользователей / группы:
-: blacklist_group1 blacklist_user :ALL
Или вы можете разрешить доступ по ssh через группу в sshd.conf, но метод access.conf более глобален. Это должно позволить вашим пользователям по-прежнему получать доступ к хосту, но не входить в систему.
Эрик
Возможно, это связано с ключами ssh. К сожалению, я понятия не имею, что именно вам нужно было бы поставить после ключа, вам нужно будет выяснить, что hg push
делает, когда вы толкаете. Например, с помощью rsync вы можете сделать что-то вроде:
command="rsync --server -vlogDtpre.iL . /path/to/dir/",no-pty,no-agent-forwarding,no-port-forwarding ssh-dss Adslkjhdfslw.......rest_of_key
Поместите указанное выше в .ssh / authorized_keys2, а затем посмотрите, сможете ли вы выяснить, какая команда hg push выполняется, и поместите ее в поле команды.
Возможно, что hg push выполняет только scp, и в этом случае оболочка scponly также может выполнять эту работу.
Надеюсь, это укажет вам правильное направление.