Eu gostaria de poder usar uma chave ssh para autenticação, mas ainda assim restringir os comandos que podem ser executados no túnel ssh.
Com o Subversion, consegui isso usando um arquivo .ssh / allowed_keys como:
command="/usr/local/bin/svnserve -t --tunnel-user matt -r /path/to/repository",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2EAAAABIetc...
Eu tentei isso com "/ usr / bin / git-shell" no comando, mas recebo apenas a antiga fatal: What do you think I am? A shell?
mensagem de erro antiga .
/bin/bash
?Eu poderia usar o git-shell com sucesso diretamente no arquivo allowedKeys sem usar um script adicional.
A chave é adicionar em
\"
torno da variável env.Testado em rhel6 openssh-server-5.3p1-70.el6.x86_64:
fonte
git-shell
, mas isso pode ser apenas paranóia.A solução da Grawity pode ser facilmente modificada para funcionar, substituindo a linha
com a linha
As aspas resolvem os problemas relatados acima e a substituição de exec por git-shell parece um pouco mais segura.
fonte
git-shell
foi projetado para ser usado como um shell de logon, para receber-c "originalcommand"
como argumentos. Isso não acontece com "comandos forçados" no OpenSSH; em vez disso, o comando forçado é passado para o shell configurado.O que você pode fazer é escrever um script que o verifique
$SSH_ORIGINAL_COMMAND
e execute. Exemplo no bash :fonte
git <cmd>
não sãogit-<cmd>
?man git-shell
(git 1.7.3.4): Atualmente, apenas quatro comandos podem ser chamados, git-receive-pack git-upload-pack e git-upload-archive com um único argumento necessário ou servidor cvs (para chamar o git -cvsserver).$SSH_ORIGINAL_COMMAND
com que seja inválido, e causandogit-shell
bum out :-(Não consegui que a solução do grawity funcionasse pelo mesmo motivo relatado por Neil Mayhew (ou seja, as aspas simples enviadas pelo cliente git causando um inválido
$SSH_ORIGINAL_COMMAND
- estou usandogit v1.7.x
)No entanto, a seguinte solução implementada pelo @moocode simplesmente funciona:
https://moocode.com/posts/6-code-your-own-multi-user-private-git-server-in-5-minutes
Ruby FTW! :-)
fonte
Para garantir a integridade, e como a pergunta original não especificou que a mesma conta deveria ser usada para coisas que não são do git, a resposta óbvia é usar
git-shell
como foi projetada para ser usada: defina-a como o shell de login (ou sejausermod
, com , in/etc/passwd
) para esse usuário ssh.Se você possui uma única conta de usuário que deseja usar de duas maneiras:
... então as outras respostas neste tópico se aplicam. Mas se você puder alocar um usuário separado para o git, definir seu shell como
git-shell
a maneira mais simples de restringi-lo e é um pouco mais seguro, pois não requer scripts de shell adicionais.fonte