我已按照说明建立了gitolite,一切都按计划进行。
我有点不确定用户名部分是如何工作的,浏览文档并没有帮助我 - 也许我错过了一些简单的东西。
如果我有两台客户机,供一个真人使用,但在每台机器上都有用户名,让我们说dave和david。如何组织keydir和任何配置文件中的密钥,以便它们代表同一个用户?我得到后缀的东西,dave @ laptop,dave @ desktop(我认为),而不是如何连接不同的客户端机器用户名,因为它似乎在验证时寻找这个(可能是因为包含user @ host信息的公钥) ?)
如果需要,我可以提供更多细节 - 我只是不想用无关的信息轰炸你们所有人。
非常感谢。
答案 0 :(得分:51)
“最简单,最容易理解的是把钥匙放在不同的地方 子目录[在你的/ kedir里面],(alice.pub,home / alice.pub, laptop / alice.pub等。“
参考:http://gitolite.com/gitolite/gitolite.html#multi-key
如果您问如何完成以下任务:
在每台计算机上使用不同的ssh密钥,您只需创建密钥(即:keygen“david@someemail.com”),然后将公钥复制到您的gitolite keydir目录(gitolite-admin / keydir)。执行此操作时,只需将密钥命名为david@homecomputer.pub
,david@workcomputer.pub
和david@laptop.pub
。将密钥添加到存储库(git add keydir/.
),将提交(git commit -m "added David's additional keys"
)和git push
添加回服务器。
Gitolite足够聪明,知道即使它是一个不同的密钥,用户名(在@
之前)仍然是david
,并且会让该用户登录并使用ACL {{ 1}}
希望这有帮助
修复您可能david
john_home.pub
打开gitolite repo(admin repo)并将john_work.pub
中的密钥重命名为kedir
和{{ 1}}提交和推送。现在,您的用户john@work.pub
可以从任一计算机登录并使用相同的用户名。
请注意,为了使其正常工作,SSH密钥中的电子邮件地址必须与所有用户密钥相同。因此,使用上面的示例,在密钥john@home.pub
,john
和david@homecomputer.pub
中,所有密码都应该包含david@workcomputer.pub
的电子邮件地址。
上面是“旧方法”对此做的,如果您以“电子邮件地址方式”命名您的密钥,可能会导致并发症,这与我上面所说的相反gitolite不检查您的密钥是否正确的电子邮件地址。请忽略(为了清楚起见,我保留了原始评论。)
答案 1 :(得分:11)
至少对于Gitolite v3 最简单的解决方案是使用此处记录的子文件夹系统http://sitaramc.github.com/gitolite/users.html
Gitolite将通过keydir递归搜索并将所有.pub关联为一个用户。 我现在使用子文件夹系统与Windows笔记本电脑和Linux开发机器工作正常。
user @ host约会似乎太复杂了。
我正在做这样的事情:
keydir |--mfang | |--laptop01 | | |--mfang.pub | |--linux01 | | |--mfang.pub |...etc
答案 2 :(得分:4)
自gitolite v3.5.2-10-g437b497(2013年9月,提交59c817d0)以来,有一个更简单的解决方案:
ukm, for "user key management"
用户密钥管理允许某些用户添加和删除密钥。
它可以引入一个级别的委托,当不仅仅是gitolite管理员用户可以添加新的ssh公钥时,其他用户现在也可以这样做。
它还有助于添加/删除公共ssh密钥。
您可以在“contrib/t/ukm.t
”中看到它:
Gitolite文档includes a section on that topic,但 ukm
,更容易(“Users that want to manage multiple keys”部分):
你的gitolite管理员用你的一把钥匙作为你的初始钥匙来创造你的gitolite身份。此密钥只能由gitolite管理员管理,而不能由您管理。它基本上决定了你对gitolite所知的名称。
You can add new keys to this identity and remove them at your will
# 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
";
答案 3 :(得分:3)
我已经重组了我的gitolite管理员keydir几次,但仍然没有真正决定哪种是最好的组织方式。如果你能坚持一些惯例,事情肯定会更容易,但这并不总是可行的。幸运的是,gitolite是灵活的。
一般情况下,我更喜欢 not 使用包含所有密钥的单个平面目录,在命名约定“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
请注意:
一般来说,我更喜欢并使用选项#1,附上一些选项#2的例子。选项#2可能会简化内部网自动化,如果您有服务器进出(可能是配置和回收VM)并希望维护主机级而不是用户级,那么您可以(例如)轻松清理退役主机上的过时密钥(例如,短期测试VM)。
关于gitolite的好处是keydir目录的(重新)组织不会影响用户。但是如果不小心的话,你很容易(无意中)锁定你的用户(或你自己)。
答案 4 :(得分:1)
您在服务器上的一个用户下安装gitolite;通常为git
,并且在您的SSH连接字符串中,您始终明确使用git@servername
连接到Git用户帐户。然后,Gitolite将查看您提供的公钥,在您的配置中找到它,并将您视为关联用户。
答案 5 :(得分:1)
你总是这样连接:
git clone gitoliteuser@gitoliteserver:reponame
无论您是哪个用户。 Gitolite通过您提供的公钥识别您。例如,该密钥称为dave.pub。通过与此公钥的ssh连接完成的任何操作都将由gitolite根据配置文件中使用“dave”或“all”的位置进行详细检查。
您可以自由设置名称和电子邮件,使其成为您在不同计算机和不同存储库上的所需内容。提交将拥有该信息。但是,您可以读取或写入的分支,树或存储库取决于管理存储库中配置文件中“dave”的限制 - 如果您对ssh使用相同的公钥/私钥。
希望这会有所帮助。
答案 6 :(得分:1)
每个人似乎都缺少一个微妙的观点,或者至少没有明确回答。
OP询问如何在两个不同的PLATFORMS上使用两个不同的USERNAMES和两个不同的(相关的)pub-keys来处理同一个PERSON。
EG。 dave@platform_a.pub和david@platform_b.pub都代表同一个真正的git用户。
添加dave和amp;都很容易大卫作为gitolite.conf文件中“@known”(已知用户)行的用户,并将两个密钥放在keydir中,但是没有办法判断这是两个独立的用户,还是同一个人。
EG。 “git blame”会将戴夫和大卫视为两个独立的用户。
除了OP的帖子之外,如果有几个戴维斯在同一个项目上工作会发生什么更复杂的事情?
我想有关的戴维斯必须制定一个系统(或满足于互相指责; - )。
答案 7 :(得分:0)
Gitolite使用ssh强制命令进行身份验证。每个有权访问gitolite存储库的用户都会在安装gitolite的情况下登录。钩子在keydir中获取新密钥,并将它们添加到配置为使用强制命令的授权密钥文件中。
用户被迫使用带有参数的gitolite shell,该参数是用户名。以下相关钩子接受文件路径并将其分配给用户,然后剥离名称中带有/
的所有目录和文件。剩下的内容将成为用户名,只要它以.pub
结尾,并且只要至少有一个附加字符,它将忽略@
后缀之前的单个.pub
符号
my $user = $f;
$user =~ s(.*/)(); # foo/bar/baz.pub -> baz.pub
$user =~ s/(\@[^.]+)?\.pub$//; # baz.pub, baz@home.pub -> baz
这提供了这样的功能:
keydir
|--host1
|--dave.pub
|--david.pub
|--host2
|--dave.pub
目录是任意的,但出于组织目的,主机用于提供结构。您最终会有两位dave
位用户和一位david
位用户。
我使用的配置更像是这样:
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密钥目录的users子目录。