如何确定客户端的SSH指纹以便在Git钩子中使用

时间:2017-06-10 02:17:36

标签: git ssh githooks sshd git-daemon

我有一个Git update挂钩,检查正在更新的分支是否为主,如果是,则向客户端发送错误消息。我现在想要这样做只有push es to master我自己做的将会通过。

目前,我已将两个SSH密钥添加到用户authorized_keys的{​​{1}}。其中一个是我的,我打算添加其他人。我看了here

  

如果您允许每个人通过公钥身份验证与单个用户(如“git”)连接,则可能必须为该用户提供一个shell包装器,以确定哪个用户基于公钥进行连接,以及相应地设置一个环境变量。

但他们没有解释如何做到这一点,我找不到任何关于如何做这件事的例子。你如何确定SSH机器的指纹?我还考虑过创建一个单独的" git-admin"用户帐户,但裸存储库位于/ home / git目录中,我无法考虑如何让两个用户使用相同的网址推送到同一个存储库。我不能让用户共享同一个主目录,因为git将同时适用于两者,我也无法为这一个设置环境变量而不是另一个。

我的服务器在FreeBSD上运行。

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

1 个答案:

答案 0 :(得分:1)

这称为ssh forced command, and is used for instance by gitolite

你可以:

  • 在服务器端安装gitolite,它利用了本机ssh功能,并且可以限制对某些分支的写入(推送)访问。
    它是 authorization layer you can test for access for specific branches

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