gitolite sam w sobie jest warstwą authorization, która nie potrzebuje ssh.
Należy tylko znać , który wywołuje go, aby upoważnić tę osobę do wykonywania poleceń git.
SSH jest używany do uwierzytelniania (ale można użyć HTTP Apache do uwierzytelniania, jak również, na przykład)
Sposób gitolite jest wywoływana przez ssh jest to opisane w „Gitolite and ssh” i wykorzystuje mechanizm ssh forced command:
~/.ssh/authorized_keys
(na gitolite serwerem ssh) wygląda następująco:
command="[path]/gitolite-shell sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gitolite-shell usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
Najpierw dowiaduje się, który z kluczy publicznych w tym pliku jest zgodny z logowaniem przychodzącym. Po znalezieniu dopasowania, uruchomi polecenie podane w tej linii; np., jeśli się zalogowałem, uruchomiłoby się [path]/gitolite-shell sitaram
.
Pierwszą rzeczą, na którą należy zwrócić uwagę, jest to, że tacy użytkownicy nie otrzymują "dostępu do powłoki", co jest dobre!
(polecenie zmuszony = no powłoka interaktywna sesja: będzie dostarczać tylko ograniczony shell, wykonując tylko jeden scenariusz, zawsze takie same)
Przed uruchomieniem polecenia, jednak sshd
ustawia zmienną środowiskową o nazwie SSH_ORIGINAL_COMMAND
, która zawiera rzeczywistą komendę git
wysłaną przez twoją stację roboczą.
To jest polecenie, które zostanie uruchomione, jeśli nie masz części command=
w pliku kluczy autoryzowanych.
Kiedy gitolite-shell
przejmuje kontrolę, to wygląda na pierwszy argument ("sitaram
", "usertwo
", etc), aby określić, kim jesteś. Następnie sprawdza zmienną SSH_ORIGINAL_COMMAND
, aby dowiedzieć się, do którego repozytorium chcesz uzyskać dostęp i czy czytasz lub piszesz.
Teraz, gdy ma on użytkownika, repozytorium i żądany dostęp (odczyt/zapis), gitolite sprawdza swój plik konfiguracyjny i zezwala lub odrzuca żądanie.
Fakt, że authorized_keys
wywołuje skrypt perla (gitolite-shell
) dlatego Gitolite jest napisany w języku Perl.
Może to równie dobrze wywołać program javascript.
Jeśli twój ssh na GitHubie bez żadnego polecenia, otrzymasz wiadomość powitalną, taką jak Twoja wzmianka w pytaniu.
Gitolite wyświetla podobny komunikat, jak wyszczególniono w print_version()
function of the info
command script:
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";
}
Wiadomość wygląda następująco:
hello admin, this is [email protected] running gitolite3 v3.0-12-ge0ed141 on git 1.7.3.4
late 2013 Gitolite documentation zawiera teraz ten schemat, który podsumowuje wszystkie kawałki:
gitolite jest open source, można dowiedzieć się, jak to działa, czytając kod/dokumentację. – tpg2114
Przeczytałem kod i z tego, co mogę zebrać, jest skrypt perl. Nie znam perla, więc liczyłem na to, że ktoś da mi szybki przykład, by wyprodukować to, co mam powyżej. – user1813844
http://stackoverflow.com/questions/5180981/ssh-client-for-node-js – Peter