我想阻止git commit
中的虚假用户。这意味着一个用户必须无法与其他人更改他/她的电子邮件。我用的是gitolite。我该如何实现此功能?由于我有用户的公钥,我可以将他们的电子邮件/名称绑定到该公钥吗?
答案 0 :(得分:2)
由于我有用户的公钥,我可以使用该公钥绑定电子邮件/名称吗?
非本机:Gitolite仅适用于用户ID(从http或ssh会话中提取并在变量GL_USER
中设置)
所以你需要在其他地方获得这些信息。
我使用的是公钥,由用户提供并存储在gitolite/keys
回购的gitolite-admin
目录中。
公共ssh密钥由3部分组成:
ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WhateverYouWant
公钥后面的最后一部分是一个可以代表你想要的字符串。
我向用户要求一个带有电子邮件地址的密钥(最后)
然后,我为所有回购设置VREF
(an update hook in gitolite),这将使用从user.email
文件中提取的电子邮件验证提交中显示的~gitolite/.ssh/authorized_keys
。
该文件由gitolite管理,包含user.name
及其电子邮件(因为我希望用户给我公钥的方式)
command=="..../gitolite-shell user-id" xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx WhateverYouWant
如果任何电子邮件与正确的用户名不匹配,则VREF挂钩将拒绝推送。
我自己VREF CHECKID
(略有不同)的目的,在gitolite.conf
声明为:
repo @all
RW+ = gitoliteadm
- VREF/CHECKID = @all
答案 1 :(得分:1)
我写了一个钩子,它采用了与前一个答案略有不同的方法。您在顶部放置了一个EMAILDOMAIN,它确保提交日志中的电子邮件地址等于[提交用户的SSH密钥文件名] @ [EMAILDOMAIN]。
我把它扔进了gitolite-admin / common-hooks所以它在推送时运行服务器端。
url=('http://quant-econ.net/_downloads/graph1.txt')
response= urllib2.urlopen(url)
txt= response.read()
nodes=txt.split("\n")