O shell do Git não está ativado?

24

Estou tentando instalar o servidor git. Quando defino o shell padrão para meu usuário do git como / usr / bin / git-shell, recebo um erro ao fazer o login como git.

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

Com o trabalho de acesso baseado em chave ssh, as permissões estão definidas corretamente.

A pesquisa do Google não mostra nada sobre esse erro.

Eu também usei esse método em instalações anteriores e nenhum erro foi mostrado. Também olhei para o servidor em funcionamento, se ele tiver alguns arquivos ou configurações extras, mas não existe.

Especificações do sistema:

  • Gentoo linux (mais recente)
  • Git 1.7.5.3

/ etc / passwd line:

git:x:1002:1004::/home/git:/usr/bin/git-shell
Pedro
fonte
git-shellé um shell restrito a ser usado apenas para a funcionalidade push / pull (ou seja git push, git fetche git pull). Não é para ser interativo, portanto você não deve fazer login em um shell interativo. Você pode torná-lo um pouco interativo adicionando um git-shell-commandsdiretório na página inicial do usuário e associando alguns binários dentro dele. Mas é muito limitado ( cdpor exemplo, não há binário ), portanto, uma alternativa melhor é fazer login como rootum sudousuário capaz e fazer isso sudo -u git -spara obter um bashshell completo sob o gitusuário.
ADTC 23/07

Respostas:

17

Encontrei isso depois de executar locate git-shell-commands

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

Programas de amostra que podem ser chamados através do git-shell. Coloque um diretório chamado 'git-shell-command' no diretório inicial de um usuário cujo shell seja git-shell. Qualquer pessoa que faça login como esse usuário poderá executar executáveis ​​no diretório 'git-shell-command'.

Comandos fornecidos:

ajuda: Imprime os nomes dos comandos disponíveis. Quando executado interativamente, o git-shell executa automaticamente 'help' na inicialização, desde que exista.

lista: exibe qualquer repositório vazio cujo nome termina com ".git" no diretório inicial do usuário. Nenhum outro repositório git é visível, embora possa ser clonável através do git-shell. 'list' é projetado para minimizar o número de chamadas ao git que devem ser feitas na localização de repositórios disponíveis; se sua instalação possui repositórios adicionais que podem ser descobertos pelo usuário, você pode modificar a 'lista' de acordo.

Então, eu executei os seguintes 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

Pude executar o seguinte como gitusuário:

[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

Agora não vejo o que é uma boa ajuda e lista, mas o login funcionou. :)

david
fonte
1
lá teria que ser repositórios nuas nos diretórios pessoais dos usuários para 'lista' para fazer qualquer coisa (de acordo com o readme)
michael
4

eu só tinha que fazer, # mkdir ~git/git-shell-commandsentão su gittrabalhei paragit 1.8.1.5-r1

pjammer
fonte
1
Sim, funciona. Agora você está no shell git. Então o que? É completamente inútil para a interação, a menos que você vincule alguns binários dentro da git-shell-commandspasta. Eu acho que é mais útil pular tudo isso e fazer sudo -u git -scom que você obtenha um bashshell completo com acesso a todos os binários. Você também permanece no diretório atual.
ADTC 23/07
3

Se você observar o código que aciona essa mensagem de erro (que parece ter sido diferente nas versões mais antigas do 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."); 

esse deve ser um problema correto no diretório git-shell.

O usuário deve ter permissões de leitura e execução no diretório para executar os programas nele.

VonC
fonte
... exatamente como diz a mensagem de erro. (-:
JdeBP 01/07
@JdeBP: desculpe;) @ Peter e suponho que você tenha ~/git-shell-commandsas permissões corretas?
VonC