Como o ForceCommand deve ser configurado para permitir que o usuário de backup execute qualquer comando rsync? Com o ForceCommand configurado para / usr / bin / rsync, recebo o erro abaixo: conexão inesperadamente fechada ...
/ etc / ssh / sshd_config no servidor remoto que hospeda os arquivos a serem copiados de:
Match User backup
PasswordAuthentication no
PubkeyAuthentication yes
AllowTCPForwarding no
X11Forwarding no
ForceCommand /usr/bin/rsync
Comando rsync em execução no servidor local fazendo a cópia do servidor remoto:
rsync -avzh --progress [email protected]:/opt/backups/automatic/cron/mysql/ /tmp/.
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(601) [Receiver=3.0.7]
Se eu configurar o ForceCommand para o comando rsync exato, como o abaixo, posso rsync remotamente com êxito como o usuário de backup, mas para este projeto não quero ter que usar o comando completo como abaixo:
ForceCommand /usr/bin/rsync --server --sender -vlwkDonecf.iLew . /opt/backups/automatic/cron/mysql/
Se eu configurar o ForceCommand para usar um script como o abaixo, posso rsync remotamente com êxito. Estou curioso para saber por que isso funciona e / usr / bin / rsync não funciona?
Match User backup
PasswordAuthentication no
PubkeyAuthentication yes
AllowTCPForwarding no
X11Forwarding no
ForceCommand /home/backup/cron/validate-rsync
O script validate-rsync:
#!/bin/sh
#script to validate rsync
#script source: http://troy.jdmz.net/rsync/#validate-rsync
case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\'*)
echo "Rejected"
;;
*\|*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
Minha principal questão é por que o ForceCommand / usr / bin / rsync não funciona?
Também estou curioso sobre a melhor maneira de fazer isso. Eu não posso chroot o usuário de backup porque eu estou copiando de várias pastas diferentes. Eu realmente não quero ter que usar o comando rsync --server --client etc. completo porque eu estou copiando várias pastas diferentes e isso parece excessivo. Estou curioso sobre as maneiras mais simples / melhores de restringir o usuário de backup ao rsync.