Que comandos o git usa quando se comunica via ssh?

4

Usando command="" em authorized_keys , posso restringir os comandos que podem ser executados por uma chave específica.

Quais comandos eu preciso permitir para ter um git remoto funcionando?

De o livro Pro Git , posso inferir que git-upload-pack e git-receive-pack são necessários, mas há mais alguma coisa?

Note que ainda quero fazer login no usuário normalmente, mas não com essa chave.

    
por James Tocknell 01.07.2014 / 06:25

2 respostas

8

O Git inclui um comando git-shell adequado para uso como um shell de login somente do Git. Aceita exatamente os seguintes comandos:

git receive-pack
git upload-pack
git upload-archive
git-receive-pack
git-upload-pack
git-upload-archive
cvs server (used for emulating a CVS server, and not required for the Git protocol)

Esses são os únicos comandos que você precisa permitir. Todas as versões do Git que eu tenho acesso usam apenas as versões com hífen.

git-shell em si pode ser bom o suficiente para o que você quer fazer também.

Você pode verificar o que o Git está executando para qualquer comando específico, configurando GIT_SSH para um shim que ecoa os argumentos. Faça um script ssh.sh :

#!/bin/bash
echo "$@" >&2

Em seguida, execute:

GIT_SSH="./ssh.sh" git push

e você verá o comando remoto que tentou executar.

    
por 01.07.2014 / 06:43
0

Se você não quiser usar a conta de usuário para qualquer outra coisa, basta executar chsh para o usuário e selecionar /usr/bin/git-shell (ou onde ele está localizado) como o shell de login do usuário.

No entanto, como você deseja restringir o usuário somente ao usar uma chave específica, precisamos criar um script auxiliar para fazer o mesmo.

Crie um arquivo, por exemplo, no diretório inicial (do host de destino) chamado git-ssh-remote-command , contendo:

#!/bin/sh
exec git-shell -c "$SSH_ORIGINAL_COMMAND"

Execute chmod a+rx /path/to/git-ssh-remote-command para torná-lo executável e, em seguida, use-o no arquivo .ssh/authorized_keys para a chave que deseja restringir ao acesso somente ao git, por exemplo:

restrict,command="/path/to/git-ssh-remote-command" ssh-dss 1478912c844...

Com a ajuda do script, isso limitará a chave para executar apenas os comandos permitidos pelo git-shell.

NOTA: Por padrão, o git-shell não permite comandos adicionais necessários, por exemplo, git-lfs; veja man git-shell para instruções de como fazer isso, se necessário.

    
por 03.07.2018 / 10:24