Gitolite выполняет аутентификацию с помощью принудительных команд ssh. Каждый пользователь, имеющий доступ к хранилищу gitolite, входит в систему при использовании, под которым установлен gitolite. Хуки принимают новые ключи в keydir и добавляют их в файл авторизованных ключей, настроенный для использования принудительных команд.
Пользователи вынуждены использовать оболочку gitolite с параметром, и этим параметром является имя пользователя. Следующий фрагмент соответствующего хука берет путь к файлу и назначает его пользователю, затем он удаляет все каталоги и файлы с /
в имени. то, что от этого останется, станет именем пользователя, если оно оканчивается на .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
. Если бы у меня было больше одного пользователя, я бы, вероятно, имел подкаталог users, содержащий каталог ключей steve.