我想制作一个 ssh 密钥(无密码),以便我可以将其分发给远程用户,以便他们可以对我的存储库进行 hg pull 或 hg clone。我已经制作了一个仅使用命令 /usr/bin/hg 的 ssh 密钥,但在使用 clone 或 pull 命令时不起作用,因为命令字符串与 mercurial 内部使用的远程命令调用不匹配。
当您执行以下操作时,是否可以获取 mercurial 在远程主机上执行的命令:
hg clone ssh://user@host//path-to-repo
hg pull ssh://user@host//path-to-repo
我能否可靠地想出几个可以覆盖我所有基础的命令字符串?如果他们要使用特定修订版本,是否会通过 ssh 使用不同的远程命令?
答案1
Mercurial 附带了方便的脚本,专门用于此类受限访问。该脚本可能已在您的服务器上,名为 hg-ssh,但您也可以在此处找到它:http://www.selenic.com/repo/hg-stable/raw-file/tip/contrib/hg-ssh
要使用它,只需在文件中添加如下一行/home/user/.ssh/authorized_keys
:
command="hg-ssh path/to/repo1 /path/to/repo2 ~/repo3 ~user/repo4" ssh-dss ...
这将确保拥有该密钥的人只能使用 mercurial(而不是 shell)并且只能在您列出的存储库上使用。
答案2
因此,如果您不想让他们推送,那么我建议除了 Ry4an 的答案之外,还使用 hg-ssh 命令的 --read-only 选项。