Git

NOME

git-shell - Shell de login restrito para acesso SSH, apenas para o Git

RESUMO

chsh -s $(command -v git-shell) <usuário>
git clone <usuário>@localhost:/path/to/repo.git
ssh <usuário>@localhost

DESCRIÇÃO

Este é um shell de login para contas SSH para fornecer acesso restrito ao Git. Ele permite a execução apenas dos comandos Git do lado do servidor, implementando a funcionalidade pull/push, além dos comandos personalizados presentes em um subdiretório chamado git shell command no diretório inicial do usuário.

COMANDOS

git shell aceita os seguintes comandos após a opção -c:

git receive-pack <argumento>
git upload-pack <argumento>
git upload-archive <argumento>

Chame o comando correspondente do lado do servidor para apoiar a solicitação do comando git push, git fetch ou git archive --remote do cliente.

cvs server

Imite um servidor CVS. Consulte git-cvsserver[1].

Caso um diretório ~/git-shell-command estiver presente, o comando git shell também manipulará outros comandos personalizados executando "git-shell-commands/<comando> <argumentos>" no diretório inicial do usuário.

USO INTERATIVO

É predefinido que os comandos acima possam ser executados apenas com a opção -c; o shell não é interativo.

Caso um diretório ~/git-shell-command estiver presente, o comando git shell também poderá ser executado interativamente (sem argumentos). Caso um comando help estiver presente no diretório git-shell-command, ele será executado para fornecer ao usuário uma visão geral das ações que são permitidas. Em seguida, é apresentado um prompt "git>", onde é possível digitar qualquer um dos comandos do diretório git-shell-command, ou exit para encerrar a conexão.

Em geral, este modo é utilizado como uma interface administrativa para permitir que os usuários listem os repositórios dos quais eles têm acesso para, criar, excluir ou renomear os repositórios ou alterar as descrições e permissões do mesmo.

Caso um comando no-interactive-login existir, ele será executado e o shell interativo será abortado.

EXEMPLOS

Para desativar os logins interativos, exibindo uma saudação:

$ chsh -s /usr/bin/git-shell
$ mkdir $HOME/git-shell-commands
$ cat >$HOME/git-shell-commands/no-interactive-login <<\EOF
#!/bin/sh
printf '%s\n' "Olá $USER! Você se autenticou com sucesso, porém eu não"
printf '%s\n' "forneço um acesso interativo ao shell."
exit 128
EOF
$ chmod +x $HOME/git-shell-commands/no-interactive-login

Para habilitar o acesso ao git cvsserver (que geralmente deve ter o exemplo no-interactive-login acima) como um pré-requisito, como criando o diretório git-shell-commands permite logins interativos):

$ cat >$HOME/git-shell-commands/cvs <<\EOF
if ! test $# = 1 && test "$1" = "server"
then
	echo >&2 "git-cvsserver lida apenas com \"server\""
	exit 1
fi
exec git cvsserver server
EOF
$ chmod +x $HOME/git-shell-commands/cvs

VEJA TAMBÉM

ssh(1), git-daemon[1], contrib/git-shell-commands/README

GIT

Parte do conjunto git[1]

scroll-to-top