Git shell no habilitado?

24

Estoy tratando de instalar el servidor git. Cuando configuro el shell predeterminado para mi usuario de git en / usr / bin / git-shell, aparece un error al iniciar sesión como git.

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

El acceso basado en clave Ssh funciona, los permisos están configurados correctamente.

La búsqueda de Google no muestra nada con respecto a este error.

También utilicé este método en instalaciones anteriores y no se mostró tal error. También miré el servidor en funcionamiento si tiene algunos archivos o configuraciones adicionales, pero no existe.

Especificación del sistema:

  • Gentoo linux (último)
  • Git 1.7.5.3

/ etc / passwd línea:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Peter
fuente
git-shelles un shell restringido que se utilizará solo para la funcionalidad de inserción / extracción (es decir git push, git fetchy git pull). No está destinado a ser interactivo, por lo que no debe iniciar sesión en un shell interactivo. Puede hacerlo algo interactivo agregando un git-shell-commandsdirectorio en la página de inicio del usuario y simulando algunos binarios dentro. Pero es muy limitado (no hay binario para cd, por ejemplo), por lo que una mejor alternativa es iniciar sesión como rootun sudousuario capaz y sudo -u git -sobtener un bashshell completo debajo del gitusuario.
ADTC

Respuestas:

17

Encontré esto después de correr locate git-shell-commands

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

Programas de muestra invocables a través de git-shell. Coloque un directorio llamado 'git-shell-command' en el directorio de inicio de un usuario cuyo shell es git-shell. Entonces, cualquiera que inicie sesión como ese usuario podrá ejecutar ejecutables en el directorio 'git-shell-command'.

Comandos provistos:

ayuda: Imprime los nombres de los comandos disponibles. Cuando se ejecuta de forma interactiva, git-shell ejecutará automáticamente 'ayuda' al inicio, siempre que exista.

lista: muestra cualquier repositorio vacío cuyo nombre termina con ".git" en el directorio de inicio del usuario. No hay otros repositorios de git visibles, aunque podrían ser clonables a través de git-shell. 'list' está diseñado para minimizar la cantidad de llamadas a git que deben realizarse para encontrar repositorios disponibles; Si su configuración tiene repositorios adicionales que deberían ser detectables por el usuario, es posible que desee modificar 'lista' en consecuencia.

Entonces ejecuté los siguientes comandos como 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

Luego pude ejecutar lo siguiente como gitusuario:

[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

Ahora no veo qué buena ayuda y lista son, pero el inicio de sesión funcionó. :)

david
fuente
1
tendría que haber repositorios vacíos en los directorios de inicio de los usuarios para que la "lista" haga cualquier cosa (según el archivo léame)
michael
4

solo tenía que hacerlo y # mkdir ~git/git-shell-commandsluego su gittrabajé paragit 1.8.1.5-r1

pjammer
fuente
1
Si, funciona. Ahora estás en el git shell. ¿Y que? Es completamente inútil para la interacción a menos que enlace simbólicamente algunos binarios dentro de la git-shell-commandscarpeta. Creo que es más útil omitir todo eso y hacerlo sudo -u git -spara obtener un bashshell completo con acceso a todos los binarios. También te quedas en el directorio actual.
ADTC
3

Si observa el código que activa ese mensaje de error (que parece haber sido diferente en versiones anteriores 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."); 

Esto debería ser un problema correcto en el directorio git-shell.

El usuario debe tener permisos de lectura y ejecución en el directorio para ejecutar los programas que contiene.

VonC
fuente
... tal como dice en el mensaje de error, de hecho. (-:
JdeBP
@JdeBP: lo siento;) @Peter y supongo que tienes ~/git-shell-commandslos permisos correctos?
VonC 01 de