我在使用 Gitolite 设置 IP 限制时遇到了一些问题

我在使用 Gitolite 设置 IP 限制时遇到了一些问题

我在使用 Gitolite 设置 IP 限制时遇到了麻烦。这可能很简单,这是我第一次使用它(我最终从 Gitosis 切换过来,因为它无法满足我的需要)

基本上,我的每个客户站点都有一个 git 存储库。我推送到该存储库,然后 post-receive 钩子会根据我推送的位置推送到她的实时站点或开发站点。无论如何,问题是客户想要访问她站点上的文件,我对此表示同意,但因为她可以在 ~/.ssh 中访问她的存储库的 SSH 密钥,所以她可以直接访问存储库,而我不希望从 Web 服务器之外允许这样做。

这是我的配置的相关部分:

repo    example.com
        R VREF/FROM/127.0.0.1 = user

这会起作用,但 Gitolite 会生成错误的 authorized_keys 文件:

command="/usr/share/gitolite/gl-auth-command user",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ,from="127.0.0.1" ssh-rsa...

问题在于 no-pty 后面的空格。删除空格后一切正常。保留空格,则密钥将被忽略。

任何关于如何正确设置的想法都将不胜感激!除非没有其他办法,否则每次更改某些内容时,我真的不想在 authorized_keys 文件上运行 sed……

谢谢!

答案1

gitolite 食谱”示例 2:按源 IP 地址进行限制“表明此 VREf 没有向授权密钥添加任何内容。

并且 VREF 在 gitolite V3 中定义得更好(而不是gitolite V2 中的虚拟引用)。

答案2

解决方案:

1 制作包含以下内容的触发器/ip-limit

#!/bin/bash

#
# ip-limit
#

UnrestrictedUserName=Me
PermittedIP=127.0.0.1

if [ "$GL_USER" == "$UnrestrictedUserName" ] ; then
    exit 0;
fi
IP=$(echo $SSH_CLIENT | perl -pe 's/ .*//g');
if [ "$IP" != "$PermittedIP" ] ; then
    echo "You ($GL_USER) are not permitted from the IP ($IP)" >&2
    exit 1;
fi
exit 0

2 指示 gitolite 使用它:

chmod 0777 triggers/ip-limit
cp .gitolite.rc .gitolite.rc.origonal
perl -pi -e 's/(^.*ENABLE)/    PRE_GIT => ['\''ip-limit'\''],\n$1/g' .gitolite.rc

笔记:

  • VREF 仅在推送时调用,因此不能用于限制获取等。
  • GL_REPO 对某些人也可能有用。

相关内容