![我在使用 Gitolite 设置 IP 限制时遇到了一些问题](https://linux22.com/image/637151/%E6%88%91%E5%9C%A8%E4%BD%BF%E7%94%A8%20Gitolite%20%E8%AE%BE%E7%BD%AE%20IP%20%E9%99%90%E5%88%B6%E6%97%B6%E9%81%87%E5%88%B0%E4%BA%86%E4%B8%80%E4%BA%9B%E9%97%AE%E9%A2%98.png)
我在使用 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 对某些人也可能有用。