Ao usar o rsync via SSH, muitas vezes é necessário executá-lo como root no servidor remoto. Para evitar abrir o SSH para login direto do usuário root, o caminho mais seguro é permitir que o usuário remoto use sudo apenas para o comando rsync, e sem precisar digitar a senha.
Este post mostra como configurar isso corretamente em sistemas Debian.
Por que fazer isso?
- Você precisa executar
rsynccomo root no servidor remoto - O login root via SSH está desabilitado (como deve estar)
- Você quer evitar abrir permissões sudo completas para o usuário
Solução: sudo limitado ao rsync, sem senha
1. Verifique o caminho do rsync
No servidor, rode:
which rsync
O caminho padrão é geralmente:
/usr/bin/rsync
2. Crie um arquivo de regra específica no sudoers.d
Use o visudo para garantir que não haja erros de sintaxe:
sudo visudo -f /etc/sudoers.d/rsync_user
Adicione a seguinte linha:
usuario ALL=(ALL) NOPASSWD: /usr/bin/rsync
Substitua usuario pelo nome real do usuário usado na conexão SSH.
Isso concede permissão para executar somente o comando /usr/bin/rsync com sudo, sem pedir senha.
3. Remova possíveis restrições de TTY
Algumas distribuições, inclusive o Debian, podem exigir um terminal para sudo funcionar. Verifique se requiretty está desativado.
Abra o arquivo principal do sudoers:
sudo visudo
Procure por:
Defaults requiretty
Se existir e não estiver comentado, comente:
# Defaults requiretty
Se não existir, não precisa fazer nada.
4. Teste a permissão
Ainda no servidor, simule o que será feito pelo cliente:
sudo -u usuario sudo /usr/bin/rsync --version
Deve exibir a versão do rsync sem pedir senha. Se pedir senha ou falhar, revise as permissões.
5. Exemplo de uso com rsync remoto
No cliente (seu computador local), o comando fica assim:
rsync -avz --progress -e "ssh -p 10022" --rsync-path="sudo rsync" usuario@servidor:/caminho/origem/ /caminho/destino/
Ou, se for executar localmente como root:
sudo rsync -avz --progress -e "ssh -p 10022" --rsync-path="sudo rsync" usuario@servidor:/caminho/origem/ /caminho/destino/
Isso executa o rsync local como root, e no servidor remoto também como root, mas sem exigir login root e sem senha de sudo.
Considerações
- Este método é seguro porque limita o acesso
sudoapenas ao comando necessário (rsync) - Nunca use
ALL=(ALL) NOPASSWD: ALLsem necessidade real - Esta abordagem é ideal para scripts de backup, sincronização e deploy entre servidores
