authorized_keys文件中的Gitolite用户名

时间:2012-12-19 17:35:12

标签: git gitolite authorized-keys

我会尽力解释我的情景:

我在debian squeeze服务器中使用了gitolite,有3个用户可以访问和使用这些存储库:

  • alex@workbox
  • alex@homebox
  • katy@workbox

以上是三个Ubuntu框的相应用户名和主机名(Alex从两个位置工作)。

我做的第一件事是将alex@workbox添加到gitolite:

  1. Alex使用ssh-keygen
  2. 生成了他的ssh密钥
  3. 我将他的ssh密钥复制为alex@workbox.pub在我当地的gitolite-admin克隆仓库的“keydir”文件夹中
  4. 修改了我当地的gitolite-admin克隆仓库的conf / gitolite.conf文件,以便让alex @ workbox RW访问存储库:
    repo project1
    RW+ = alex@workbox
  5. 通常是这样的:
    • git add .
    • git commit -m "Added alex@workbox"
    • git push
  6. 当Alex尝试克隆project1 repo时,出现错误,表示用户“alex”的访问被拒绝。
    所以,我登录到服务器并打开了/var/lib/gitolite/.ssh/authorized_keys 该文件的第一部分是:

    command="/usr/share/gitolite/gl-auth-command alex",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa...
    

    所以我用alex手动替换了alex@workbox,保存了文件,这次Alex能够克隆存储库并使用它而没有任何问题。

    然后我执行了相同的上述步骤来添加Katy,在推送到gitolite-admin后,我再次打开了authorized_keys文件,看到gitolite将“user@hostname”替换为“{ {1}}”。
    因此它user代替alexalex@workbox则相同 然后我不得不再次手动替换它并保存文件。 我看到,我为katy repo gitolite所做的每次推送都会在其gitolite-admin中用“user@hostname”替换每个“user”,这样就无法访问存储库用户。

    如何让gitolite保持“.ssh/authorized_keys”? 是否要在服务器上进行配置或在我的本地克隆user@hostname存储库上进行配置更改?

2 个答案:

答案 0 :(得分:2)

configuration syntax 提及:

  

用户名和回购名称尽可能简单;它们必须以字母数字开头,但之后它们还可以包含._-

     

用户名可以选择,然后是@domainname,其中包含至少一个. (这允许您使用电子邮件地址作为某人的用户名)。

您的命名约定不符合“@”的正确语法。

您可以在src/triggers/post-compile/ssh-authkeys

中查看此规则
sub optionise {
    my $f = shift;

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

    my @line = slurp($f);
    if ( @line != 1 ) {
        _warn "$f does not contain exactly 1 line; ignoring";
        return '';
    }
    chomp(@line);
    return "command=\"$glshell $user" . ( $kfn ? " $f" : "" ) . "\",$auth_options $line[0]";
}

答案 1 :(得分:2)

你真的永远不需要直接修改authorized_keys文件的Gitolite部分。

@suffix添加密钥文件路径名的想法是,它允许管理员轻松地为单个Gitolite用户添加多个密钥。在您的情况下,keydir/alex@workbox.pubkeydir/alex@homebox.pub都映射到名为alex的单个Gitolite用户。如果这两个密钥都由同一个人“拥有”,这通常是您想要的;它允许您在配置文件中使用alex,而不必提及两个密钥文件名。如果这些密钥由不同的人拥有(或者您希望对一个人的不同密钥强制执行不同的访问限制),那么您将需要稍微不同地命名它们(使用除@之外的分隔符,或者至少包括@.pub之间的一个句点。

每个用户多个密钥

名为“multiple keys per user”的Gitolite文档部分介绍了为单个Gitolite用户配置多个密钥的方法。主要有两种方式:

  • 将名为username.pub的文件放在keydir(较新方法)的不同子目录中,
  • 在用户名后添加@后缀(旧方法,Gitolite管理员有时难以查看)。

使用子目录方法,您可以使用以下路径名:

keydir/workbox/alex.pub
keydir/homebox/alex.pub

使用后缀方法,您可以使用以下路径名:

keydir/alex@workbox.pub
keydir/alex@homebox.pub

以上所有路径名提供的密钥将作为名为alex的Gitolite用户进行身份验证(用户名中没有@);您将在配置文件中使用(例如)RW+ = alex。这些方法(仅使用密钥的路径名的一部分来形成Gitolite用户名)让管理员为Gitolite用户添加(和删除)密钥,而无需在每次有人想要使用新密钥(或失去访问权限)时编辑配置文件(或控制)旧钥匙。)

例如,如果alex获得了新的移动设备,您可以添加keydir/mobile/alex.pubkeydir/alex@mobile.pub,以便对alex已经可以访问的所有内容进行密钥访问。

电子邮件式用户名

后缀方法有一个限制:后缀必须包含句点。存在此限制,以便您可以使用电子邮件地址作为用户名;您仍然可以使用带有此类用户名的后缀(或子目录)。以下密钥路径名可用于提供用户名jane@gmail.com的密钥(@gmail.com是用户名的一部分):

keydir/external/jane@gmail.com.pub
keydir/jane@gmail.com@remotebox.pub

jane@gmail.com用户与普通jane用户不同。

注意:通过手动向@workbox条目添加authorized_keys后缀,您实际上强制Gitolite使用不包含句点的电子邮件类型用户名(基于如何将keydir路径名解析为用户名) ,这通常是不可能的。)

使用哪种?

当您期望能够将用户的密钥放入有限数量的类别(家庭,工作,移动等)时,子目录似乎最有意义。如果您的一次性密钥不适合任何特定类别,则@ - 后缀似乎很有用。

独立于子目录/后缀,电子邮件式用户名可能对任何在组织内没有规范用户名的人(例如临时外部承包商)有用。

摘要

Gitolite用户名源自keydir下的路径名,但与此处使用的文件名不同。具体来说,keydir路径名通过剥离所有子目录并删除.pub扩展名以及任何@后缀(只要@之后没有句点,就会映射到用户名 - 另外,@被视为电子邮件式用户名的一部分。)

如果您遇到一个人想要使用多个密钥的情况,那么您应该使用上述方法之一(子目录或@后缀(没有句点))来映射多个密钥单个Gitolite用户名。

示例:安装keydir/workbox/alex.pubkeydir/homebox/alex.pub,然后在配置文件中使用alex(同时访问这两个密钥)。

如果你有不同人的密钥,你想给出相似的名字,或者你想为一个人的各种密钥授权不同的访问权限(家庭访问是只读的吗?),那么你应该使用{{以外的分隔符。 1}}在用户名的区别部分之间(或确保在@之后有一段时间,因此它被视为电子邮件式用户名。)

示例:安装@keydir/workbox/alex.pubkeydir/homebox/alex-ro.pub,然后在配置文件中使用mobile/alex-ro.pubalex(例如以某种方式提供{ {1}}只读访问权限,而alex-ro获得读写访问权限。