出于某种原因,我的gitolite没有附带样本配置文件,我似乎无法在任何地方找到一个,我确定这个问题在该文件中得到解答,如果有人可以找到我的副本,请!!
无论如何,gitolite配置文件的格式很简单,这里是我的剪辑
gitolite conf
# please see doc/gitolite.conf.mkd for details on syntax and features
@nmscDevs = dev1@compaid.com dev2@compaid.com dev3@compaid.com
@buildMgr = william_slepecki@compaid.com dev4@compaid.com
repo gitolite-admin
RW+ = gitadmin william_slepecki@compaid.com
repo grindstone
RW+ = gitadmin
RW+ prod$ = @buildMgr
- prod$ = @nmscDevs
RW = @nmscDevs
我的keydir文件夹中有几个公钥:
keydir/
gitadmin.pub
william_slepecki@compaid.com.pub
我的问题是gitolite似乎忽略了为个人用户设置的权限。除非我给gitadmin用户完全控制,否则无法在存储库(读取,写入等)上工作。然后似乎每个人都使用gitadmin用户的权限。我像这样克隆了回购
git clone git@server:grindstone.git
但是当我尝试用这样的东西克隆时
git clone 'dev1@compaid.com'@server:grindstone.git
我提示输入密码。每个用户都需要在服务器上拥有一个帐户,以便他们可以使用它吗?
gitolite的权限究竟如何?我领先了解git用户需要一个帐户ssh到服务器,然后一旦gitolite接管它使用与git请求一起传递的电子邮件来确定权限,我在这里错了吗?我错过了什么?
BTW,这是我的.ssh / config
host server
user git
hostname server
identityfile ~/.ssh/gitadmin
host server
user william_slepecki@compaid.com
hostname server
identityfile ~/.ssh/id_rsa
更新: 我已经升级到最新版本的gitolite,当我尝试克隆时,我得到了这个
$ git clone git@server:testing.git
Cloning into 'testing'...
FATAL: R any testing gitadmin DENIED by fallthru
(or you mis-spelled the reponame)
fatal: The remote end hung up unexpectedly
我的配置文件现在看起来像这样:
repo testing
RW+ = william_slepecki
我的.ssh配置没有变化。另外,我在我的日志中有这个
2012-05-08.13:01:13 19027 ssh ARGV=gitadmin SOC=git-upload-pack 'testing.git' FROM=10.99.5.146
2012-05-08.13:01:13 19027 access(testing, gitadmin, R, 'any'),-> R any testing gitadmin DENIED by fallthru
2012-05-08.13:01:13 19027 trigger,Writable,access_1,ACCESS_1,testing,gitadmin,R,any,R any testing gitadmin DENIED by fallthru
这是我全球git配置的顶级剪辑
[user]
name = Willie Slepecki
email = william_slepecki@compaid.com
为什么世界上仍然坚持认为gitadmin会在回购中,为什么不使用william_slepecki?这到底有什么名称可供使用?
答案 0 :(得分:2)
我只会指出你的两个主要错误:
第一个错误:Gitolite只使用keydir中找到的键的用户部分(前一个'@')。
例如:gitolite只识别一个用户william_slepecki
,用于密钥william_slepecki@compaid.com.pub
和william_slepecki@anothercompaid.org.pub
,此处唯一的一点是此用户可以使用2个不同的密钥进行身份验证,您无法提供密钥权限,仅限用户。
第二个错误:
您的gitolite服务仅由一个普通系统用户提供,可能是git
,因此应该与git@server.com:repo.git
建立连接,gitolite用户不需要或拥有系统帐户,只需要一个ssh密钥,所以连接到william_slepecki@server.com:repo.git
将无法正常工作
答案 1 :(得分:2)
好吧,我的问题有几个了。
首先,我误解了gitadmin键的作用。我认为,因为这是唯一一个在服务器上拥有实际帐户的用户,它需要在所有开发人员工作站上。事实证明这是错误的。 gitolite获取keydir目录中的密钥,并在推送时将它们添加到git / .ssh / authenticated_keys文件中。这允许keydir中的所有密钥作为用户git登录到计算机上。由于git用户没有与之关联的控制台,因此没有安全漏洞。
其次,我的〜/ .ssh / conf文件。由于我不明白#1是如何工作的,我认为git以某种方式将电子邮件地址作为用户名作为git命令的一部分传递。一旦我找到了#1,我就能够清理配置文件以映射git @ server用户并使用我的法线来处理其他所有内容。
一旦理解并解决了这两个问题,所有权限就开始正常运行。我现在已经替换了服务器上的gitadmin用户密钥,使开发人员站上的用户密钥无效,并更新了我所有的开发人员配置。管理层再次感到高兴。
谢谢大家。