我会尽力解释我的情景:
我在debian squeeze服务器中使用了gitolite,有3个用户可以访问和使用这些存储库:
alex@workbox
alex@homebox
katy@workbox
以上是三个Ubuntu框的相应用户名和主机名(Alex从两个位置工作)。
我做的第一件事是将alex@workbox
添加到gitolite:
repo project1
RW+ = alex@workbox
git add .
git commit -m "Added alex@workbox"
git push
当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
代替alex
而alex@workbox
则相同
然后我不得不再次手动替换它并保存文件。
我看到,我为katy
repo gitolite所做的每次推送都会在其gitolite-admin
中用“user@hostname
”替换每个“user
”,这样就无法访问存储库用户。
如何让gitolite保持“.ssh/authorized_keys
”?
是否要在服务器上进行配置或在我的本地克隆user@hostname
存储库上进行配置更改?
答案 0 :(得分:2)
用户名和回购名称尽可能简单;它们必须以字母数字开头,但之后它们还可以包含
.
,_
或-
。用户名可以选择,然后是
@
和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.pub
和keydir/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.pub
或keydir/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.pub
和keydir/homebox/alex.pub
,然后在配置文件中使用alex
(同时访问这两个密钥)。
如果你有不同人的密钥,你想给出相似的名字,或者你想为一个人的各种密钥授权不同的访问权限(家庭访问是只读的吗?),那么你应该使用{{以外的分隔符。 1}}在用户名的区别部分之间(或确保在@
之后有一段时间,因此它被视为电子邮件式用户名。)
示例:安装@
,keydir/workbox/alex.pub
和keydir/homebox/alex-ro.pub
,然后在配置文件中使用mobile/alex-ro.pub
和alex
(例如以某种方式提供{ {1}}只读访问权限,而alex-ro
获得读写访问权限。