Gitolite One用户 – 许多密钥 – 不同的用户名

我希望按照说明设立gitolite,一切工作都按计划进行。

我对用户名部分是如何工作的稍微不确定,并且查看文档并没有帮助我 – 也许我错过了一些简单的东西。

如果我有两台客户端机器供一个真人使用,但是在每台机器上都有用户名,比如dave和david。 我怎样才能组织在keydir和任何configuration文件中的密钥,使他们都代表相同的用户? 我得到了后缀的东西,戴夫@笔记本电脑,戴夫@桌面(我认为),而不是如何有不同的客户机用户名连接,因为它似乎寻找此身份validation(可能是因为公钥包含用户@主机信息?)

如果需要,我可以提供更多的细节 – 我只是不想用无关的信息轰炸你们。

非常感谢。

目前推荐的方式根据文件

“最简单也是最容易理解的就是把他们的密钥放在不同的子目录里[你的/ kedir],(alice.pub,home / alice.pub,laptop / alice.pub等等)。

参考: http : //gitolite.com/gitolite/gitolite.html#multi-key

旧的方式

如果你问你如何完成以下内容:

  1. 大卫( 家用电脑
  2. 大卫( 工作电脑
  3. 大卫( 笔记本

在每台计算机上使用不同的ssh密钥,您只需创build密钥(即:keygen“david@someemail.com”),然后将公钥复制到gitolite keydir目录(gitolite-admin / keydir)。 当你这样做的时候,只需要input密钥david@homecomputer.pubdavid@workcomputer.pubdavid@laptop.pub 。 将密钥添加到存储库( git add keydir/. ),提交( git commit -m "added David's additional keys" )和git push送回服务器。

Gitolite足够聪明,知道即使它是一个不同的键,用户名( @之前)仍然是david ,并会让该用户login和使用ACL的david

希望这可以帮助

要解决你可能有john_home.pub john_work.pub的场景,请打开你的gitolite john_work.pub (admin repo)并将你的kedir的键值重命名为john@work.pubjohn@home.pub commit和push。 现在,您的用户john可以从任一台机器login并使用相同的用户名。

请记住,为了达到此目的,SSH密钥中的电子邮件地址必须与所有用户的密钥相同。 因此,使用上面的示例,在键盘david@homecomputer.pubdavid@workcomputer.pubdavid@laptop.pub都应该有david@laptop.pub的电子邮件地址。

上面是“老办法”做到这一点,可能会导致一个复杂的,如果你已经命名为“电子邮件地址的方式”与我上面所述的相反,gitolite不检查您的密钥是否正确的电子邮件地址。 请忽略(为了清楚起见,我留下了原始评论)。

对于Gitolite v3至less最简单的解决scheme是使用这里logging的子文件夹系统http://sitaramc.github.com/gitolite/users.html

Gitolite将通过keydirrecursionsearch并将所有的.pub关联为一个用户。 我正在使用Windows笔记本电脑和Linux开发机器的子文件夹系统,工作正常。

user @ host惯例似乎太复杂了。

我正在做这样的事情:

 keydir
  | --mfang
  |  | --laptop01
  |  |  | --mfang.pub
  |  | --linux01
  |  |  | --mfang.pub
  | ...等

我已经重组了我的gitolitepipe理员keydir几次了,而且还没有真正决定哪个是最好的组织方式。 如果你可以坚持一些约定,事情肯定会更容易,但这并不总是可能的。 幸运的是,gitolite是灵活的。

一般来说,我宁愿使用包含所有密钥的单个平面目录, 依靠命名约定“user@host.pub”来保持直观。 (这似乎暗示在其他答案?)如果您有多个主机上的多个密钥和单个“真实”用户的多个用户名(甚至两个不同主机上的两个不同用户的相同用户名),可能会变得混淆。 使用子目录有助于组织事物 – 使用任何深度的树,但通常我只使用一个级别。

两个主要选项(甚至是其组合):

  1. 每个“真实”用户一个目录,每个目录包含该用户的多个密钥(例如,通常每个主机一个)。
  2. 每个(授权的)主机一个目录,每个将要在该主机上工作的用户使用一个(或多个)密钥。 虽然用户可以将他们的私钥复制到另一个主机,但是(在我的情况下)是不鼓励的。 在任何情况下,子目录都是在最初生成密钥的主机之后命名的。

作为每个用户(选项#1)的一个子目录的示例:

 conf |--gitolite.conf keydir |--john.doe | |--john@host1.pub | |--john@host2.pub | |--jdoe@host2.pub | |--john.doe@company.com.pub | |--tester@temp-vm43.pub |--will.rodgers | |--wrodgers.pub | |--wrodg1234@host2.pub | |--will.rodgers@company.com.pub | |--tester@temp-vm22.pub |...etc 

注意:

  • 目录名称(在keydir下)与gitolite无关。
  • 目录名称应该是通用唯一的,例如电子邮件地址或其他全局ID。 这允许在不同主机上具有相同用户名的“git”用户。
  • 像“user.pub”或“user@email.com.pub”这样的密钥可能会被多个主机的用户共享; 然而,基于政策,这样做可能会令人沮丧。

一般来说,我更喜欢和使用选项#1,洒了几个选项#2的例子。 如果你有服务器来来往往(也许提供和回收虚拟机),并且想把事物保持在主机级别而不是在用户级别,那么选项2可能可以简化内部networking的自动化,所以你可以(例如)方便地清理过时的退役主机上的密钥(例如,短期testingVM)。

gitolite的好处是keydir目录的(重新)组织不影响用户。 但是如果不小心的话,你可以很容易(无意中)locking你的用户(或你自己)。

由于gitolite v3.5.2-10-g437b497(2013年9月,提交59c817d0 ),有一个更简单的解决scheme:

ukm ,用于“用户密钥pipe理” 。

用户密钥pipe理允许某些用户添加和删除密钥。

它可以引入一个级别的授权,当gitolitepipe理员用户不仅可以添加新的SSH公钥,但其他用户现在也可以这样做。

它也方便添加/删除公共ssh密钥。

你可以在“ contrib/t/ukm.t ”中看到它的作用:

Gitolite文档包含了关于该主题的一节 ,但是使用ukm则更为简单(“ 要pipe理多个键的用户 ”一节):

您的gitolitepipe理员将您的一个密钥作为您的初始密钥创build您的gitolite身份。 这个密钥只能由gitolitepipe理员来pipe理,而不能由你来pipe理。 它基本上决定你知道哪个名字你的gitolite。

您可以添加新的密钥到这个身份,并根据您的意愿删除它们 。

 # The admin can add multiple keys for the same userid. try " ADDOK u5 admin u4\@example.org ADDOK u5 admin u4\@example.org\@home ADDOK u5 admin laptop/u4\@example.org ADDOK u5 admin laptop/u4\@example.org\@home "; 

您在服务器上的一个用户下安装gitolite; 通常是git ,在你的SSH连接string中,你总是明确地使用git@servername连接到Git用户帐户。 然后,Gitolite会查看您提供的公钥,在您的configuration中find并像对待用户一样对待您。

你总是这样连接:

 git clone gitoliteuser@gitoliteserver:reponame 

不pipe你是什么用户。 Gitolite通过您提供的公钥来标识您。 例如,这个键叫做dave.pub。 任何通过这个公共密钥的ssh连接完成的任何事情都将由gitolite根据configuration文件中使用“dave”或“all”的方式来检查。

您可以自由地设置名称和电子邮件,以便在不同的机器和不同的存储库上成为您想要的。 提交将会有这些信息。 但是,如果您使用相同的公钥/私钥作为ssh,那么您可以读取或写入的分支,树或存储库是由pipe理库中configuration文件中“dave”的限制方式决定的。

希望这可以帮助。

每个人似乎都有一个微妙的缺失,或者至less没有清楚地回答。

OP询问了如何在两个不同的PLATFORMS上使用两个不同的USERNAMES和两个不同的(关联的)pub-keys来处理同一个人。

例如。 dave@platform_a.pub和david@platform_b.pub都代表同一个真正的git用户。

在gitolite.conf文件的“@ known”(已知用户)行上添加dave&david作为用户并且将两个密钥放入keydir中是很容易的,但是却无法判断这是否是两个单独的用户或同一个人。

例如。 “git blame”将把dave和david当成两个独立的用户。

除了OP的post之外,如果有几个Davids在同一个项目上工作,会发生什么呢?

我想有关的大卫将不得不制定一个系统(或满足责备对方;-)。

Gitolite使用ssh强制命令进行身份validation。 每个有权访问gitolite存储库的用户都会使用gitolite安装在其中。 挂钩在keydir中获取新密钥,并将其添加到configuration为使用强制命令的授权密钥文件中。

用户被迫使用gitolite shell和参数,并且该参数是用户名。 下面的相关钩子把文件path分配给用户,然后把所有的目录和文件用名字中的“ / ”去掉。 剩下的部分只要以.pub结尾就会成为用户名,只要至less有一个附加字符,就会忽略.pub后缀之前的单个@符号。

 my $user = $f; $user =~ s(.*/)(); # foo/bar/baz.pub -> baz.pub $user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz 

这提供了这样的function:

 keydir |--host1 |--dave.pub |--david.pub |--host2 |--dave.pub 

目录是任意的,但是为了组织的目的,主机被用来给结构。 你最终有两个dave用户和一个david用户。

我使用更像这样的configuration:

 keydir |--steve |--steve@example.com@laptop.pub |--steve@example.com@desktop.pub |--services |--jenkins |--jenkins@master-buildhost.pub |--jenkins@slave-buildhost.pub |--redmine |--redmine@dev-server.pub |--jira |--jira@dev-alias.pub 

同样,目录结构并不重要。 这给了我的用户steve@example.comjenkinsredminejirasteve@example.com用户有两个键以及jenkins用户。 如果我有一个以上的用户,我可能会有一个包含steve key目录的users子目录。