Oczywiście istnieją gotowe(często dość rozbudowane skrypty) korzystające z tej metody(np.Gitosis).
W poniższym artykule chciałbym dotrzeć jednak do sedna działania, dzięki temu czytelnicy będą mogli wymyślić także inne zastosowania i udziwnienia.
By umożliwić innej osobie korzystanie z naszego shella bez podawania jej hasła korzystamy z kluczy RSA. Jak dokładnie należy to zrobić napisałem w innym artykule(Klik). W stosunku do niego należy wykonać drobną modyfikację. Przed treścią klucza należy dopisać poniższą linijkę:
no-port-forwarding,command="./script.pl"
"command" jako shella ustawia wybrane przez nas polecenie, przy okazji zabraniamy znajomym forwardowania za pomocą naszego konta(wszystkie możliwe opcje możemy znaleźć w manualu do sshd).
Teraz pora na najistotniejszą część, tj. treść skryptu(w tym wypadku PERL), która może wyglądać np. tak:
#!/usr/bin/perl
$command = $ENV{'SSH_ORIGINAL_COMMAND'};
if($command eq "hg -R merktest serve --stdio") {
exec($command);
} else {
print "Shell access denied!\n";
}
Oczywiście jest to tylko przykładowy kod dla szczególnego przypadku(dostęp do repozytorium pod nazwą "merktest" ). Można go uogólnić, ulepszyć wedle uznania, wyobraźni i potrzeb. Nie daję tutaj rozbudowanego przykładu gdyż nie jest to celem artykułu ;).
Jeśli chcemy zrobić coś analogicznego dla git'a zmieniamy warunek na:
if ($command eq "git-upload-pack gitrepo")
Oczywiście to również jest szczególny przypadek dla repozytorium o nazwie "gitrepo".
Generalnie polecam eksperymenty.