Git shell nie jest włączony?

24

Próbuję zainstalować serwer git. Kiedy ustawiam domyślną powłokę dla mojego użytkownika git na / usr / bin / git-shell, pojawia się błąd podczas logowania jako git.

fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.

Dostęp oparty na kluczu SSH, uprawnienia są ustawione poprawnie.

Wyszukiwarka Google nie pokazuje niczego dotyczącego tego błędu.

Użyłem tej metody również w poprzednich instalacjach i nie pojawił się żaden taki błąd. Patrzyłem też na działający serwer, jeśli ma jakieś dodatkowe pliki lub konfigurację, ale nie ma czegoś takiego.

Specyfikacja systemu:

  • Linux Gentoo (najnowszy)
  • Git 1.7.5.3

/ etc / passwd line:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Piotr
źródło
git-shelljest ograniczony shell być wykorzystywane do funkcji Push / ciągnącej tylko (tj git push, git fetchi git pull). Nie ma być interaktywny, więc nie powinieneś logować się w interaktywnej powłoce. Możesz uczynić go nieco interaktywnym, dodając git-shell-commandskatalog w domu użytkownika i dowiązując do niego niektóre pliki binarne. Ale jest bardzo ograniczony ( cdna przykład nie ma pliku binarnego ), więc lepszą alternatywą jest zalogowanie się jako użytkownik rootlub sudosprawny i sudo -u git -suzyskanie pełnej bashpowłoki pod tym gitużytkownikiem.
ADTC

Odpowiedzi:

17

Znalazłem to po uruchomieniu locate git-shell-commands

cat /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands/README

Przykładowe programy wywoływane za pomocą git-shell. Umieść katalog o nazwie „git-shell-command” w katalogu domowym użytkownika, którego powłoką jest git-shell. Wtedy każdy, kto zaloguje się jako ten użytkownik, będzie mógł uruchamiać pliki wykonywalne w katalogu „git-shell-Command”.

Podane polecenia:

pomoc: Drukuje nazwy dostępnych poleceń. Gdy zostanie uruchomiony interaktywnie, git-shell automatycznie uruchomi „pomoc” przy starcie, pod warunkiem, że istnieje.

lista: wyświetla dowolne repozytorium, którego nazwa kończy się na „.git” w katalogu osobistym użytkownika. Żadne inne repozytoria git nie są widoczne, chociaż można je klonować za pomocą git-shell. „lista” ma na celu zminimalizowanie liczby połączeń z git, które należy wykonać w celu znalezienia dostępnych repozytoriów; jeśli Twoja konfiguracja ma dodatkowe repozytoria, które powinny być możliwe do wykrycia przez użytkownika, możesz odpowiednio zmodyfikować „listę”.

Uruchomiłem więc następujące polecenia jako root:

cp /usr/share/doc/git-1.7.4.4/contrib/git-shell-commands /home/git -R
chown git:developers /home/git/git-shell-commands/ -R
chmod +x /home/git/git-shell-commands/help
chmod +x /home/git/git-shell-commands/list
exit

Byłem wtedy w stanie uruchomić jako gitużytkownik:

[me@svn ~]$ su git
Password:
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> help
Run 'help' for help, or 'exit' to leave.  Available commands:
list
git> list
git> exit

Teraz nie widzę, jaka jest dobra pomoc i lista, ale logowanie zadziałało. :)

David
źródło
1
w katalogach domowych użytkowników musiałyby istnieć nagie repozytoria, aby „lista” mogła cokolwiek zrobić (jak w pliku readme)
Michał
4

po prostu musiałem # mkdir ~git/git-shell-commandswtedy su gitpracować dlagit 1.8.1.5-r1

pjammer
źródło
1
Tak, to działa. Teraz jesteś w skorupie gita. Co wtedy Jest całkowicie bezużyteczny do interakcji, chyba że dowiązujesz symbolicznie niektóre pliki binarne w git-shell-commandsfolderze. Myślę, że bardziej przydatne jest pominięcie tego wszystkiego i zrobienie sudo -u git -stego, aby uzyskać pełną bashpowłokę z dostępem do wszystkich plików binarnych. Pozostajesz również w bieżącym katalogu.
ADTC
3

Jeśli spojrzysz na kod, który wyzwala ten komunikat o błędzie (który wydaje się być inny w starszych wersjach Git):

if (access(COMMAND_DIR, R_OK | X_OK) == -1) {
  die("Interactive git shell is not enabled.\n"
     "hint: ~/" COMMAND_DIR " should exist "
     "and have read and execute access."); 

powinien to być właściwy problem w katalogu git-shell.

Użytkownik musi mieć uprawnienia do odczytu i wykonywania katalogu, aby móc wykonywać w nim programy.

VonC
źródło
... tak jak jest napisane w komunikacie o błędzie. (-:
JdeBP
@JdeBP: przepraszam;) @Peter i przypuszczam, że masz ~/git-shell-commandsodpowiednie uprawnienia?
VonC,