允许 Mercurial 访问但禁止 SSH

允许 Mercurial 访问但禁止 SSH

我在 Linux 机器上设置了 Mercurial 服务器,它运行良好。例如,用户可以使用以下方式向其推送和拉取数据:

hg push ssh://...

用户还可以通过 ssh 进入服务器。

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

我该如何处理这个问题?

答案1

你真正想问的是。这正是 Gitorious 为 git 所做的——它通过command=ssh 密钥文件中的条目运行,并确保只有使用 ssh 密钥才能执行 git 操作。链接的问题询问有关 Mercurial 的 Gitorious 类软件。我不是 Mercurial 用户,因此无法评论答案的质量。

答案2

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-forwardingno-agent-forwarding

这允许通过 SSH 从/向作为参数指定的存储库进行拉取/推送。如果您的所有存储库都是公共目录的子目录,则可以使用以下方法允许更短的路径:

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

您可以使用普通 shell 的模式匹配,例如:

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

答案3

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

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

-:ALL EXCEPT your_group your_user1 your_user2 :ALL

或者如果你有一个特定的组,你想将特定的用户/组列入黑名单:

-: blacklist_group1 blacklist_user :ALL

或者,您可以在 sshd.conf 中通过组允许 ssh 访问,但 access.conf 方法更全局一些。这应该允许您的用户仍然访问主机,但不能登录。

埃里克

答案4

这可能与 ssh 密钥有关。不幸的是,我不知道您需要在密钥后面放什么,您需要找出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 也可能完成这项工作。

希望这能为您指明正确的方向。

相关内容