允许Mercurial访问但不允许SSH

我已经在Linux机器上build立了一个Mercurial服务器,并且工作正常。 例如,用户可以使用类似的东西来推送它:

hg push ssh://... 

用户也可以SSH入服务器。

对于一些用户,我想限制访问权限,他们只能访问Mercurial。

我将如何去做这件事?

你正在问的是这个 。 这正是Gitorious为git所做的 – 它通过ssh密钥文件中的command=条目运行,并确保只能使用ssh密钥执行git操作。 关联的问题询问Mercurial的类似软件。 不是Mercurial用户我不能评论答案的质量。

您可以修改/etc/security/access.conf指令以仅允许特定用户login,而不允许其他用户login。

该行看起来像这样,但与您的本地化组/用户:

 -:ALL EXCEPT your_group your_user1 your_user2 :ALL 

或者,如果您有特定的群组,则要将特定的用户/群组列入黑名单:

 -: blacklist_group1 blacklist_user :ALL 

或者你可以通过sshd.conf中的group来允许ssh访问,但access.conf方法更全球一些。 这应该允许您的用户仍然访问主机,但不能login。

埃里克

Mercurial正好带有一个脚本! 使用我们提供的contrib/hg-ssh脚本来限制命令。 该文件包含这个头文件来解释如何使用它:

通过command选项在~/.ssh/authorized_keys使用,请参见sshd(8):

 command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ... 

(可能还有其他一些有用的选项: no-port-forwardingno-X11-forwardingno-agent-forwarding

这允许通过SSH从/向作为参数给出的存储库进行拉/推。 如果您的所有存储库都是公共目录的子目录,则可以通过以下方式允许更短的path:

 command="cd path/to/my/repositories && hg-ssh repo1 subdir/repo2" 

您可以使用正常shell的模式匹配,例如:

 command="cd repos && hg-ssh user/thomas/* projects/{mercurial,foo}" 

这应该是可能与SSH密钥。 不幸的是,我不知道你需要在键后面加什么东西,你需要找出hg push在你hg push时候做了什么。 例如,使用rsync,你可以做如下的事情:

命令=“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 shell也可以做这个工作。

希望这会使你指向正确的方向。