Não é exatamente o que você está perguntando. Mas apenas no caso ...
Você pode autorizar facilmente uma chave ssh específica para ter permissão apenas para executar determinados comandos na máquina remota (isso é semelhante a como gitosis e gitolite e possivelmente qualquer outra implementação segura git-over-ssh trabalhos). Resumindo, adicione essas opções ao arquivo authorized_keys
dos usuários de destino:
-
command="/path/to/validation/script"
-
no-port-forwarding
-
no-X11-forwarding
-
no-agent-forwarding
-
no-pty
O arquivo deve ficar assim no final:
command="/path/to/validation/script",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2E.....
As opções no-*
são auto-explicativas.
A opção command=
executa um comando "forçado" "ignorando qualquer comando fornecido pelo cliente".
O comando originalmente fornecido pelo cliente está disponível na variável de ambiente SSH_ORIGINAL_COMMAND
"(um pouco citado da página sshd
man). Em outras palavras, quando alguém efetua login com essa chave, o único comando que será executado é a validação script. Cabe a você permitir que eles o executem ou não. Assim, seu script de validação pode fazer algo como:
#!/bin/bash
if [[ $SSH_ORIGINAL_COMMAND == rsync --server -vtr --delete /source/path/ /destination/path/ ]]; then
$SSH_ORIGINAL_COMMAND
end
E, devido às outras opções de no-
, essa chave não pode fazer nada muito prejudicial.
Atualização: Existe um script pronto que simplifica um pouco essa configuração. - Mikko