gitolite сам по себе представляет собой уровень авторизации, которому не нужен ssh.< br> Ему нужно только знать, кто его вызывает, чтобы разрешить или запретить этому человеку выполнять команды git.
SSH используется для аутентификации (но вы также можете использовать Http Apache для аутентификации, например)
Способ вызова gitolite с помощью ssh объясняется в разделе "Gitolite и ssh" и использует механизм ssh принудительная команда:
![http://oreilly.com/catalog/sshtdg/chapter/ssh_0802.gif](https://i.stack.imgur.com/2WQvb.gif)
~/.ssh/authorized_keys
(на сервере gitolite ssh) выглядит так:
command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gitolite-shell usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
Во-первых, он выясняет, какой из открытых ключей в этом файле соответствует входящему логину. Как только совпадение будет найдено, запустится команда, указанная в этой строке; например, если бы я вошел в систему, он запустил бы [path]/gitolite-shell sitaram
.
Итак, первое, что нужно отметить, это то, что такие пользователи не получают «доступа к оболочке», и это хорошо!
(принудительная команда = нет сеанса интерактивной оболочки: будет предоставлена только ограниченная оболочка, выполняющая только один скрипт, всегда один и тот же)
Однако перед запуском команды sshd
устанавливает переменную среды с именем SSH_ORIGINAL_COMMAND
, которая содержит фактическую команду git
, отправленную вашей рабочей станцией.
Это команда, которая была бы запущена, если бы у вас не было части command=
в авторизованных ключах. файл.
Когда gitolite-shell
получает управление, он смотрит на первый аргумент ("sitaram
", "usertwo
" и т. д.), чтобы определить, кто вы. Затем он просматривает переменную SSH_ORIGINAL_COMMAND
, чтобы узнать, к какому репозиторию вы хотите получить доступ, и читаете вы или пишете.
Теперь, когда у него есть запрошенный пользователь, репозиторий и доступ (чтение/запись), gitolite просматривает свой файл конфигурации и либо разрешает, либо отклоняет запрос.
Тот факт, что authorized_keys
вызывает perl-скрипт (gitolite-shell
) это потому, что Gitolite написан на Perl.
Он вполне может вызвать программу на javascript.
Если вы используете ssh на GitHub без какой-либо команды, вы получите приветственное сообщение, подобное вашему упоминанию в вопросе.
Gitolite отображает аналогичное сообщение, как подробно описано в print_version()
функция командного сценария info
:
sub print_version {
chomp( my $hn = `hostname -s 2>/dev/null || hostname` );
my $gv = substr( `git --version`, 12 );
$ENV{GL_USER} or _die "GL_USER not set";
print "hello $ENV{GL_USER}, this is " . ($ENV{USER} || "httpd") . "\@$hn running gitolite3 " . version() . " on git $gv\n";
}
Сообщение выглядит так:
hello admin, this is git@server running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4
документация Gitolite конца 2013 года теперь включает в себя эту диаграмму, которая обобщает все части:
![ssh и Gitolite](https://i.stack.imgur.com/F7hM7.png)
person
VonC
schedule
10.11.2012