Gitolite一个用户-多个密钥-不同的用户名

Gitolite一个用户-多个密钥-不同的用户名,git,authentication,ssh,gitolite,Git,Authentication,Ssh,Gitolite,我已经按照指示安装了gitolite,一切都按计划进行 我有点不确定用户名部分是如何工作的,浏览文档对我没有帮助——也许我遗漏了一些简单的东西 如果我有两台客户端机器,供一个真实的人使用,但是在每台机器上,用户名都是,比如说dave和david。如何组织keydir和任何配置文件中的键,使它们都代表同一用户?我得到后缀的东西,dave@laptop, dave@desktop(我认为),只是不知道如何让不同的客户机用户名连接起来,因为在进行身份验证时似乎会考虑到这一点(可能是因为公钥包含user

我已经按照指示安装了gitolite,一切都按计划进行

我有点不确定用户名部分是如何工作的,浏览文档对我没有帮助——也许我遗漏了一些简单的东西

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

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


非常感谢。

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

您总是这样连接:

git clone gitoliteuser@gitoliteserver:reponame
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
keydir |--mfang | |--laptop01 | | |--mfang.pub | |--linux01 | | |--mfang.pub |...etc 无论你是什么用户。Gitolite通过您提供的公钥来标识您。例如,该键名为dave.pub。gitolite将根据配置文件中使用“dave”或“all”的位置仔细检查通过ssh连接使用此公钥执行的任何操作

您可以在不同的机器和不同的存储库上自由设置名称和电子邮件。提交将具有该信息。但是,如果您对ssh使用相同的公钥/私钥,那么您可以读取或写入哪个分支、树或存储库取决于admin repo中配置文件中“dave”的限制方式

希望这有帮助

根据文件,当前推荐的方式 “最简单、最容易理解的方法就是把钥匙放在不同的位置 子目录[在您的/kedir中],(alice.pub,home/alice.pub, 笔记本电脑/alice.pub等)

参考:

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

  • 大卫(家庭电脑)
  • 大卫(工作电脑)
  • 大卫(笔记本电脑)
  • 在每台计算机上使用不同的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“添加了David的附加密钥”
    )和将
    git推回到服务器

    Gitolite非常聪明,知道即使它是不同的密钥,用户名(在
    @
    之前)仍然是
    david
    ,并允许该用户登录并使用
    david的ACL

    希望这有帮助

    要修复您可能有
    john_home.pub
    john_work.pub
    的场景,请打开您的gitolite repo(admin repo),并将
    kedir
    中的密钥重命名为
    john@work.pub
    john@home.pub
    commit和push。现在,您的用户
    john
    可以从任意一台计算机登录并使用相同的用户名

    请记住,为了使其工作,SSH密钥中的电子邮件地址对于所有用户密钥都必须相同。因此,使用上面的示例,在键
    david@homecomputer.pub
    david@workcomputer.pub
    david@laptop.pub
    所有人的电子邮件地址均应为
    david@foobar.com


    以上是处理此问题的“老办法”,如果您以“电子邮件地址方式”命名您的密钥,则可能会导致复杂性。gitolite没有检查您的密钥是否具有正确的电子邮件地址。请忽略(为了清楚起见,我留下了最初的评论)。

    这里有一点大家似乎都忽略了,或者至少没有明确回答

    OP询问如何在两个不同的平台上使用两个不同的用户名和两个不同(关联)的pub键来处理同一个人

    例如。dave@platform_a.pub,及david@platform_b.pub两者都代表相同的真实git用户

    在gitolite.conf文件中的“@known”(known users)行中添加dave和david作为用户,并将两个键都放在keydir中是很容易的,但是无法判断这是两个单独的用户还是同一个人

    例如,“git责怪”会将dave和david视为两个独立的用户

    除了OP的帖子之外,更复杂的是,如果有几个戴维斯在同一个项目上工作,会发生什么


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

    我已经重新组织了几次我的gitolite管理员keydir,但仍然没有真正决定哪种方式是组织事情的最佳方式。如果你能坚持一些惯例,事情肯定会容易一些,但这并不总是可能的。幸运的是,gitolite是灵活的

    一般来说,我不喜欢使用包含所有键的单一平面目录,而只依赖于命名约定。”user@host.pub“把事情搞清楚。(这似乎在其他答案中有所暗示?)如果您在多个主机上有多个键,并且一个“真实”用户有多个用户名(或者两个不同主机上的两个不同用户有相同的用户名),则可能会产生混淆。使用子目录有助于组织事物——使用任意深度的树,但通常我只使用一个级别

    两个主要选项(甚至是它们的组合):

  • 每个“真实”用户一个目录,每个目录包含多个 那个用户
    keydir
      |--host1
           |--dave.pub
           |--david.pub
      |--host2
           |--dave.pub
    
    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
    
    keydir |--mfang | |--laptop01 | | |--mfang.pub | |--linux01 | | |--mfang.pub |...etc