Rsync por SSH com chaves autorizadas ... mas execute 2 comandos rsync

3

Acabei de descobrir como automatizar meus backups rsync usando authorized_keys e o parâmetro command= para que meu script rsync não possa ser modificado pelo usuário.

Meu arquivo de chaves autorizado é assim:

command="rsync --server -vlogDtprze.iLsf . /mybackupfolder/Pictures" ssh-rsa AAAAB3Nz…

O script rsync que eu executo a partir do computador que está sendo copiado é:

rsync -avz -e ssh /home/me/Pictures [email protected]:/mybackupfolder/Pictures </b>

O que eu quero fazer é fazer o backup de /home/me/Pictures e /home/me/Documents . Apenas esses dois diretórios.

Como faço isso, mas o mantenho seguro? A coisa que eu gosto sobre a configuração do arquivo de chaves autorizadas é que o usuário não pode alterar para onde o backup está indo ... apenas o que está sendo feito backup.

    
por Gilles 14.02.2014 / 17:45

3 respostas

1

Isso funcionou para mim:

Comando local:

rsync -avzr -e ssh /home/me/Documents /home/me/Pictures [email protected]:/mybackupfolder

Conteúdo do authorized_hosts remoto:

command="rsync --server -vvlogDtprze.iLsf . /mybackupfolder/" ssh-rsa AAAAB...
    
por 14.02.2014 / 18:20
2

Você precisa criar um par de chaves ssh separado para cada comando que deseja executar no terminal remoto. Use essa chave para fazer backup de cada diretório. Algo parecido com isto:

command="rsync --server -vlogDtprze.iLsf . /mybackupfolder/Pictures" ssh-rsa AAAAB3Nz--etc
command="rsync --server -vlogDtprze.iLsf . /mybackupfolder/Documents" ssh-rsa BBAAA--etc 

Do lado que você está fazendo backup, você precisará especificar o par de chaves ssh para usar para ssh usando o -i identity_file_for_each_command . Provavelmente, a maneira mais simples de fazer isso é usar um script wrapper em torno de ssh para cada backup.

    
por 14.02.2014 / 18:26
0

Para torná-lo "mais fácil" e seguro, eu configuraria um ambiente chroot para o usuário do testador:

sshd_config:

Match user tester
        ChrootDirectory /mybackupfolder/Pictures
        AllowTcpForwarding no

no diretório chroot do usuário testador, crie a seguinte pasta e copie as bibliotecas:

.
|-- lib
|   '-- x86_64-linux-gnu
|       |-- libacl.so.1
|       |-- libattr.so.1
|       |-- libc.so.6
|       '-- libpopt.so.0
|-- lib64
|   '-- ld-linux-x86-64.so.2
'-- usr
    '-- bin
        '-- rsync

Então, quando o usuário do testador conectar a máquina remota, ele só poderá sincronizar os arquivos incluídos em seu ambiente chrooted.

    
por 14.02.2014 / 18:22