Git shell non abilitata?


24

Sto cercando di installare git server. Quando imposto la shell predefinita per il mio utente git su / usr / bin / git-shell ricevo un errore all'accesso come git.

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

Lavoro di accesso basato su chiave SSH, le autorizzazioni sono impostate correttamente.

La ricerca di Google non mostra nulla riguardo a questo errore.

Ho usato questo metodo anche nelle installazioni precedenti e non è stato mostrato alcun errore. Ho anche guardato il server funzionante se ha qualche file extra o config ma niente del genere.

Specifiche di sistema:

  • Gentoo linux (più recente)
  • Git 1.7.5.3

/ etc / passwd line:

git:x:1002:1004::/home/git:/usr/bin/git-shell

git-shellè una shell limitata da utilizzare solo per la funzionalità push / pull (ovvero git push, git fetche git pull). Non è pensato per essere interattivo, quindi non dovresti effettuare il login in una shell interattiva. Puoi renderlo in qualche modo interattivo aggiungendo una git-shell-commandsdirectory nella home dell'utente e collegando simbolicamente alcuni binari all'interno. Ma è molto limitato (non esiste un file binario cd, ad esempio), quindi un'alternativa migliore è accedere come rooto un sudoutente capace e fare sudo -u git -sper ottenere una bashshell completa sotto l' gitutente.
ADTC,

Risposte:


17

L'ho trovato dopo l'esecuzione locate git-shell-commands

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

Programmi di esempio richiamabili tramite git-shell. Posiziona una directory chiamata 'git-shell-comandi' nella home directory di un utente la cui shell è git-shell. Quindi chiunque accedendo come quell'utente sarà in grado di eseguire eseguibili nella directory 'git-shell-comandi'.

Comandi forniti:

aiuto: stampa i nomi dei comandi disponibili. Quando eseguito in modo interattivo, git-shell eseguirà automaticamente 'help' all'avvio, a condizione che esista.

elenco: visualizza qualsiasi repository nudo il cui nome termina con ".git" nella home directory dell'utente. Non sono visibili altri repository git, sebbene possano essere clonabili tramite git-shell. 'list' è progettato per minimizzare il numero di chiamate da git che devono essere fatte per trovare i repository disponibili; se la tua installazione ha repository aggiuntivi che dovrebbero essere rilevabili dall'utente, potresti voler modificare 'list' di conseguenza.

Quindi ho eseguito i seguenti comandi come 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

Sono stato quindi in grado di eseguire quanto segue come gitutente:

[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

Ora non vedo cosa sia un buon aiuto ed elenco, ma il login ha funzionato. :)


1
ci dovrebbero essere dei repository nudi nelle home directory degli utenti per "list" per fare qualsiasi cosa (secondo il readme)
michael

4

dovevo solo fare, # mkdir ~git/git-shell-commandsquindi ho su gitlavoratogit 1.8.1.5-r1


1
Sì, funziona. Ora sei nel git shell. E allora? È completamente inutile per l'interazione a meno che non si colleghi simbolicamente alcuni binari all'interno della git-shell-commandscartella. Penso che sia più utile saltare tutto ciò e farlo in sudo -u git -smodo da ottenere una bashshell completa con accesso a tutti i binari. Rimani anche nella directory corrente.
ADTC

3

Se guardi il codice che attiva quel messaggio di errore (che sembra essere stato diverso nelle versioni precedenti di 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."); 

questo dovrebbe essere un problema corretto nella directory git-shell.

L'utente deve disporre delle autorizzazioni di lettura ed esecuzione per la directory per eseguire i programmi in essa contenuti.


... proprio come si dice nel messaggio di errore, in effetti. (-:
JdeBP

@JdeBP: scusa;) @Peter e suppongo che tu abbia ~/git-shell-commandsi permessi giusti?
VonC,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.