Le shell Git n'est pas activé?

24

J'essaie d'installer le serveur git. Lorsque je définis le shell par défaut de mon utilisateur git sur / usr / bin / git-shell, j'obtiens une erreur lors de la connexion en tant que git.

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

Travail d'accès basé sur la clé Ssh, les autorisations sont définies correctement.

La recherche Google n'affiche rien concernant cette erreur.

J'ai également utilisé cette méthode dans des installations antérieures et aucune erreur de ce type n'a été affichée. J'ai également regardé le serveur de travail s'il contient des fichiers ou une configuration supplémentaires, mais rien de tel.

Spécifications du système:

  • Gentoo linux (dernière)
  • Git 1.7.5.3

Ligne / etc / passwd:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Peter
la source
git-shellest un shell restreint à utiliser uniquement pour la fonctionnalité push / pull (c'est git push-à- dire , git fetchet git pull). Ce n'est pas censé être interactif, vous ne devez donc pas vous connecter dans un shell interactif. Vous pouvez le rendre quelque peu interactif en ajoutant un git-shell-commandsrépertoire dans la maison de l'utilisateur et en créant un lien symbolique vers certains binaires à l'intérieur. Mais c'est très limité (il n'y a pas de binaire pour cd, par exemple), donc une meilleure alternative est de se connecter en tant qu'utilisateur rootou sudocapable et de faire sudo -u git -spour obtenir un bashshell complet sous l' gitutilisateur.
ADTC

Réponses:

17

J'ai trouvé ça après avoir couru locate git-shell-commands

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

Exemples de programmes appelables via git-shell. Placez un répertoire nommé 'git-shell-commandes' dans le répertoire personnel d'un utilisateur dont le shell est git-shell. Ensuite, toute personne se connectant en tant qu'utilisateur pourra exécuter des exécutables dans le répertoire 'git-shell-commandes'.

Commandes fournies:

help: Imprime les noms des commandes disponibles. Lorsqu'il est exécuté de manière interactive, git-shell exécutera automatiquement «help» au démarrage, à condition qu'il existe.

list: affiche tout référentiel nu dont le nom se termine par ".git" dans le répertoire personnel de l'utilisateur. Aucun autre dépôt git n'est visible, bien qu'il puisse être clonable via git-shell. 'list' est conçu pour minimiser le nombre d'appels à git qui doivent être effectués pour trouver les référentiels disponibles; si votre configuration possède des référentiels supplémentaires qui devraient être découvrables par l'utilisateur, vous souhaiterez peut-être modifier la «liste» en conséquence.

J'ai donc exécuté les commandes suivantes en tant que 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

J'ai ensuite pu exécuter ce qui suit en tant gitqu'utilisateur:

[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

Maintenant, je ne vois pas ce qu'est une bonne aide et une bonne liste, mais la connexion a fonctionné. :)

David
la source
1
il devrait y avoir des référentiels nus dans les répertoires personnels des utilisateurs pour que la "liste" fasse quoi que ce soit (selon le readme)
michael
4

je devais juste faire # mkdir ~git/git-shell-commandsensuite su gittravaillé pourgit 1.8.1.5-r1

pjammer
la source
1
Ouais, ça marche. Maintenant, vous êtes dans le shell git. Alors quoi? Il est complètement inutile pour l'interaction, sauf si vous créez un lien symbolique vers certains fichiers binaires dans le git-shell-commandsdossier. Je pense qu'il est plus utile de sauter tout cela et de le faire sudo -u git -spour obtenir un bashshell complet avec accès à tous les binaires. Vous restez également dans le répertoire actuel.
ADTC
3

Si vous regardez le code qui déclenche ce message d'erreur (qui semble avoir été différent dans les anciennes versions de 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."); 

cela devrait être un bon problème sur le répertoire git-shell.

L'utilisateur doit disposer des autorisations de lecture et d'exécution sur le répertoire pour pouvoir exécuter les programmes qu'il contient.

VonC
la source
... comme il est dit dans le message d'erreur, en fait. (-:
JdeBP
@JdeBP: désolé;) @Peter et je suppose que vous avez ~/git-shell-commandsles bonnes autorisations?
VonC