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
旧的方式
如果你问你如何完成以下内容:
- 大卫( 家用电脑 )
- 大卫( 工作电脑 )
- 大卫( 笔记本 )
在每台计算机上使用不同的ssh密钥,您只需创build密钥(即:keygen“david@someemail.com”),然后将公钥复制到gitolite keydir目录(gitolite-admin / keydir)。 当你这样做的时候,只需要input密钥david@homecomputer.pub
, david@workcomputer.pub
和david@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.pub
和john@home.pub
commit和push。 现在,您的用户john
可以从任一台机器login并使用相同的用户名。
请记住,为了达到此目的,SSH密钥中的电子邮件地址必须与所有用户的密钥相同。 因此,使用上面的示例,在键盘david@homecomputer.pub
, david@workcomputer.pub
和david@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)的一个子目录的示例:
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.com
, jenkins
, redmine
和jira
。 steve@example.com
用户有两个键以及jenkins
用户。 如果我有一个以上的用户,我可能会有一个包含steve key目录的users子目录。