2

我有一个 Gitupdate钩子,它检查正在更新的分支是否是主分支,如果是,则向客户端发送错误消息。我现在想做它,所以只有push我自己制作的大师才能通过。

目前我有两个 SSH 密钥添加到authorized_keys一个用户git。其中一个是我的,我打算添加其他的。我在这里读到:

如果您允许每个人通过公钥身份验证与单个用户(如“git”)连接,您可能必须为该用户提供一个外壳包装器,该外壳包装器根据公钥确定哪个用户正在连接,并设置环境相应地变化。

但是他们没有解释如何做到这一点,我也找不到任何关于如何做到这一点的例子。你如何确定正在 SSH 的机器的指纹?我还考虑过创建一个单独的“git-admin”用户帐户,但裸仓库位于 /home/git 目录中,我想不出如何让两个用户使用相同的 url 推送到同一个仓库。我不能让用户共享同一个主目录,因为那样authorized_keys两者都适用,而且我没有任何方法只为一个而不是另一个设置环境变量。

我的服务器在 FreeBSD 上运行。

关于如何实现我想要做的任何想法?

4

1 回答 1

1

这称为ssh 强制命令,例如 gitolite

您可以:

  • 在服务器端安装gitolite,它利用了本机 ssh 功能,并且可以限制对某些分支的写入(推送)访问。
    它是一个授权层您可以测试特定分支的访问权限

    if gitolite access -q reponame username W master
    then
        ...
    
  • 或修改您~/.ssh/authorized_keys以添加强制命令,即在任何ssh 调用上调用的脚本,然后可以测试该调用涉及哪个键,识别您并让命令通过。
    这就是“ssh 强制命令”的含义(它与 Git 无关)

于 2017-06-10T05:37:52.957 回答