Seu problema neste caso não é que o shell não esteja limpo, mas que o cliente rsync possa executar o comando que precisa executar no servidor.
Se você usar o command="rsync..."
em authorized_keys, então esse é o comando que o sshd executará, independentemente do comando que é passado pelo cliente.
O cliente rsync irá chamar o ssh com estes argumentos:
ssh myserver rsync --server --sender -de.LsfxC . /remote/path/'.
Observe que --sender
faz parte dessas opções, porque você deseja que o servidor envie arquivos para você. Não está presente se o servidor deve receber arquivos. Observe também que --daemon
não está presente nas opções do rsync. Como a opção --config
só é relevante junto com --daemon
, ela também pode ser removida da sua entrada de comando.
Já estou mencionado, o comando será executado exatamente como está no arquivo authorized_keys. Isso significa que todos os argumentos que são passados do cliente serão ignorados. Portanto, se você realmente quiser usar o comando em authorized_keys, precisará especificar as opções exatas que o rsync forneceria ao cliente ssh, o que significa que você pode usar o rsync apenas para receber arquivos exatamente do caminho especificado em authorized_keys. Se você fornecer opções diferentes para o rsync no cliente, elas não serão efetivas no servidor e, portanto, poderão ou não funcionar, dependendo de o efeito dessas opções ser implementado no cliente ou no servidor do rsync. Então você deve considerar se realmente quer isso.
Editar Você pode usar um script como o comando e examinar a variável de ambiente SSH_ORIGINAL_COMMAND para chamar o rsync conforme necessário. Como o caminho remoto é o último argumento, você pode querer apenas verificar se ele inicia com o prefixo direito e não contém nenhum "/ .." que iria para o diretório pai.