Назад | Перейти на главную страницу

Разрешение доступа Mercurial, но запрет SSH

Я установил сервер 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 также может выполнять эту работу.

Надеюсь, это укажет вам правильное направление.