git - 如何确定客户端的 SSH 指纹以在 Git Hook 中使用

标签 git ssh githooks sshd git-daemon

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

目前我有两个 SSH key 添加到 authorized_keys用户git .其中一个是我的,我打算添加其他的。我读了here :

If you’ve allowed everyone to connect with a single user (like “git”) via public-key authentication, you may have to give that user a shell wrapper that determines which user is connecting based on the public key, and set an environment variable accordingly.



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

我的服务器在 FreeBSD 上运行。

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

最佳答案

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

您可以:

  • 安装gitolite在服务器端,它利用了 native 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 无关)
  • 关于git - 如何确定客户端的 SSH 指纹以在 Git Hook 中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44468899/

    相关文章:

    linux - 如何在没有密码和公钥的情况下进行 ssh 登录?

    Git 预提交 Hook : Prevent commits that change particular files

    git - 如何在预提交 Hook 中正确 git stash/pop 以获得干净的工作树进行测试?

    Windows 上的 GIT Hook 与批处理

    git - 我如何过滤多个标签上的 git log

    Git diff 跨分支的不同目录

    git - TortoiseGit 中的 "remote tracking branch"在哪里?

    java - 如何在您的网站上实现 Git/GitLab 以使人们能够编写代码?

    regex - 使用sed over SSH使用正则表达式从文件中删除文本

    git - 当我被 "PTY allocation request failed on channel 0"锁定时如何获得 shell 访问权限