38

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

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

如果我有两台客户端机器,供一个真实的人使用,但在每台机器上的用户名都是 dave 和 david。如何组织 keydir 和任何配置文件中的密钥,以便它们都代表同一个用户?我得到后缀的东西,dave@laptop,dave@desktop(我认为),只是不知道如何连接不同的客户端计算机用户名,因为它似乎在进行身份验证时寻找这个(可能是因为包含 user@host 信息的公钥?)

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

非常感谢。

4

8 回答 8

52

根据文档当前推荐的方式

“最简单和最容易理解的是将他们的密钥放在不同的子目录中[在你的 /kdir 中],(alice.pub、home/alice.pub、laptop/alice.pub 等)。”

参考:https ://gitolite.com/gitolite/basic-admin.html#multiple-keys-per-user

老办法

如果您问如何完成以下任务:

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

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

Gitolite 足够聪明,知道即使它是一个不同的密钥,用户名(在 之前@)仍然是david并且会让该用户登录并使用 ACL 进行david

希望这可以帮助

修复您可能已经john_home.pub john_work.pub打开 gitolite 存储库(管理员存储库)并重命名您的kedirtojohn@work.pubjohn@home.pubcommit 和 push 中的键的情况。现在您的用户john可以从任何一台机器登录并使用相同的用户名。

请记住,为了使其正常工作,SSH 密钥中的电子邮件地址需要与所有用户的密钥相同。所以使用上面的例子,在键 david@homecomputer.pub,david@workcomputer.pubdavid@laptop.puball 中应该有david@foobar.com.

以上是对此的“旧方式”,如果您以“电子邮件地址方式”命名您的密钥,这与我上面所说的相反 gitolite 不会检查您的密钥以获取正确的电子邮件地址,则可能会导致复杂化。请忽略(为了清楚起见,我留下了原始评论)。

于 2011-12-02T15:13:13.727 回答
11

对于 Gitolite v3,至少最简单的解决方案是使用此处记录的子文件夹系统http://sitaramc.github.com/gitolite/users.html

Gitolite 将通过 keydir 递归搜索并将所有 .pub 关联为一个用户。我现在正在使用带有 Windows 笔记本电脑和 linux 开发机器的子文件夹系统并且工作正常。

user@host 约定似乎太复杂了。

我正在做这样的事情:

密钥目录
 |--mfang
 | |--笔记本电脑01
 | | |--mfang.pub
 | |--linux01
 | | |--mfang.pub
 |...等
于 2012-11-08T02:26:49.827 回答
4

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

ukm,用于“用户密钥管理”

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

当不仅 gitolite 管理员用户可以添加新的 ssh 公钥,其他用户现在也可以这样做时,它可以引入一定程度的委托。

它还有助于添加/删除公共 ssh 密钥。

您可以在“”中看到它的实际效果contrib/t/ukm.t

Gitolite 文档包含一个关于该主题的部分,但使用ukm,它更容易(“想要管理多个密钥的用户”部分):

您的 gitolite 管理员使用您的其中一个密钥作为您的初始密钥创建您的 gitolite 身份。此密钥只能由 gitolite 管理员管理,而不能由您管理。它基本上确定了您对 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
";
于 2013-09-09T07:40:00.417 回答
3

我已经多次重组了我的 gitolite admin 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 可能会简化 Intranet 自动化,因此您可以(例如)轻松清理过时的退役主机上的密钥(例如,短期测试虚拟机)。

gitolite 的好处是 keydir 目录的(重新)组织不会影响用户。但是如果不小心,您很容易(无意中)锁定您的用户(或您自己)。

于 2012-06-07T05:32:07.050 回答
2

你总是这样连接:

git clone gitoliteuser@gitoliteserver:reponame

不管你是什么用户。Gitolite 通过您提供的公钥来识别您。例如,此密钥称为 dave.pub。gitolite 将根据配置文件中使用“dave”或“all”的位置来审查通过与此公钥的 ssh 连接完成的任何操作。

您可以自由地将名称和电子邮件设置为您在不同机器和不同存储库上想要的任何内容。提交将包含该信息。但是,如果您对 ssh 使用相同的公钥/私钥,则您可以读取或写入的分支、树或存储库取决于“dave”在管理存储库的配置文件中的限制方式。

希望这可以帮助。

于 2011-04-21T06:30:05.153 回答
1

您在服务器上的一个用户下安装 gitolite;通常git,并且在您的 SSH 连接字符串中,您总是明确地git@servername用于连接到 Git 用户帐户。然后 Gitolite 将查看您提供的公钥,在您的配置中找到它,并将您视为关联用户。

于 2011-04-20T17:39:47.510 回答
1

每个人似乎都在这里遗漏了一个微妙的点,或者至少没有清楚地回答。

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

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

在 gitolite.conf 文件的“@known”(已知用户)行中将 dave 和 david 作为用户添加,并将两个键都放在 keydir 中,这很容易,但是没有办法判断这是否是两个不同的用户,或同一个人。

例如。“git blame”会将 dave 和 david 视为两个独立的用户。

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

我想相关的戴维斯必须制定一个系统(或者满足于互相指责;-)。

于 2012-05-18T01:38:52.603 回答
0

Gitolite 使用 ssh 强制命令进行身份验证。每个有权访问 gitolite 存储库的用户都会在安装 gitolite 时登录。这些钩子在 keydir 中获取新密钥,并将它们添加到配置为使用强制命令的授权密钥文件中。

用户被迫使用带有参数的 gitolite shell,该参数是用户名。相关钩子的以下部分获取文件路径并将其分配给用户,然后删除/名称中带有 a 的所有目录和文件。剩下的将成为用户名,只要它以结尾,并且只要至少有一个附加字符.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、、、jenkinsredminejira用户和steve@example.com用户一样有两个密钥jenkins。如果我有多个用户,我可能会有一个包含 steve key 目录的 users 子目录。

于 2012-06-19T04:07:04.577 回答