Chciałbym móc użyć klucza ssh do uwierzytelnienia, ale nadal ograniczać polecenia, które można wykonać w tunelu ssh.
Dzięki Subversion osiągnąłem to, używając pliku .ssh / author_keys, takiego jak:
command="/usr/local/bin/svnserve -t --tunnel-user matt -r /path/to/repository",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIetc...
Próbowałem tego z poleceniem „/ usr / bin / git-shell”, ale po prostu dostaję stary, stary fatal: What do you think I am? A shell?
komunikat o błędzie.
/bin/bash
?Mogłem z powodzeniem używać git-shell bezpośrednio w pliku authorKeys bez użycia dodatkowego skryptu.
Kluczem jest dodanie
\"
wokół zmiennej env.Testowany w rhel6 openssh-server-5.3p1-70.el6.x86_64:
źródło
git-shell
, ale to może być po prostu paranoja.Rozwiązanie Grawity można łatwo zmodyfikować do pracy, zastępując linię
z linią
Cytaty zajmują się powyższymi problemami, a zastąpienie exec przez git-shell wydaje się nieco bezpieczniejsze.
źródło
git-shell
jest przeznaczony do użycia jako powłoka logowania, aby otrzymywał-c "originalcommand"
jako argumenty. Nie dzieje się tak w przypadku „poleceń wymuszonych” w OpenSSH; zamiast tego polecenie wymuszone jest przekazywane do skonfigurowanej powłoki.Możesz napisać skrypt, który to sprawdzi
$SSH_ORIGINAL_COMMAND
i wykona. Przykład w bash :źródło
git <cmd>
, niegit-<cmd>
?man git-shell
(git 1.7.3.4): Obecnie dozwolone są tylko cztery polecenia, git-receive-pack git-upload-pack i git-upload-archive z jednym wymaganym argumentem lub serwer cvs (aby wywołać git -cvsserver).$SSH_ORIGINAL_COMMAND
być nieważne i powodującegit-shell
bum :-(Nie mogłem zmusić rozwiązania grawitacji do działania z tego samego powodu, który zgłosił Neil Mayhew (tj. Pojedyncze cytaty wysłane przez klienta git powodujące nieprawidłowość
$SSH_ORIGINAL_COMMAND
- używamgit v1.7.x
)Jednak następujące rozwiązanie zaimplementowane przez @moocode po prostu działa:
https://moocode.com/posts/6-code-your-own-multi-user-private-git-server-in-5-minutes
Ruby FTW! :-)
źródło
Dla kompletności, a ponieważ oryginalne pytanie nie określił, że to samo konto musiał być użyteczny dla non-git rzeczy, oczywistym rozwiązaniem jest używać
git-shell
jak to zostało zaprojektowane do wykorzystania: ustawić ją jako powłokę zgłoszeniową (tjusermod
, in/etc/passwd
) dla tego użytkownika ssh.Jeśli masz jedno konto użytkownika, którego chcesz używać na dwa sposoby:
... wówczas obowiązują inne odpowiedzi w tym wątku. Ale jeśli możesz sobie pozwolić na przydzielenie osobnego użytkownika do git, to ustawienie jego powłoki
git-shell
to najprostszy sposób na ograniczenie tego i jest nieco bezpieczniejsze, ponieważ nie wymaga żadnych dodatkowych skryptów powłoki.źródło