我在使用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 后面的空格。去掉空格,它就能正常工作。保留空格则会忽略该键。 如果有任何正确设置的想法,将不胜感激!除非没有其他办法,否则我真的不想每次更改内容都要运行 sed 命令来修改 authorized_keys 文件... 谢谢!

1你正在使用哪个 gitolite 版本?我不明白一个 VREF 怎么会像 http://gitolite.com/gitolite/cookbook.html#example-2-restricting-by-source-ip-address 中所示的那样添加到授权密钥中。 - VonC
版本2.3.1。对了,你说得对。啊。我忘记了,我把ips放进了我的keys里,试图让它与Gitosis一起工作。唉,这真是尴尬。 - Chelsea Urquhart
2个回答


你能为一个实际的例子添加代码吗?似乎只有在写入时才调用VREFs。 - user1133275
@user1133275 我没有比 http://gitolite.com/gitolite/cookbook/index.html#example-2-restricting-by-source-ip-address 更多的了。你可以使用 http://gitolite.com/gitolite/cookbook/index.html#access 来控制访问权限。 - VonC
那个例子有点误导人,但是我还是弄明白了;请看下面的答案。 - user1133275

解决方案: 1. 创建包含触发器/ IP 限制的操作。
#!/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对某些人也可能有用。

做得很好,+1。这适用于所有代码库,对吗? - VonC
根据@VonC的指示,GL_REPO可以用于按仓库进行过滤。 - user1133275