Autenticação de chave pública SSH
A primeira coisa que você quer fazer é começar com a autenticação de chave pública ssh. Isso permitirá que seu script use SSH sem uma senha.
Tudo o que o servidor precisa é o SSH instalado e a autenticação de chave pública configurada para o usuário que executará o script de backup a partir do RasPi.
Aqui está um bom tutorial para autenticação de chave pública: link
Opção 1: SSH e Tar
Você pode compactar o tar.gz do servidor e transmiti-lo diretamente pelo ssh com algo assim:
ssh [email protected] "tar -czvf - / 2> /var/log/sshbackup" > vpsbackup.tar.gz
Isso fará com que o VPS tar e gzip todos os arquivos em / e transmiti-lo por SSH para armazenar em vpsbackup.tar.gz no RasPi. Um registro do backup mais recente será mantido em / var / log / sshbackup no VPS.
Opção 2: Rsync
Enviar um inteiro .tar.gz por SSH é ineficiente ... Arquivos que não mudam ainda serão transmitidos. Uma solução melhor é usar o rsync, mas isso dificulta a criação de um .tar.gz que preserve as permissões. Se você tiver espaço de armazenamento suficiente no RasPi, poderá armazenar os arquivos de backup apenas como arquivos simples. Então você pode ter um script tar.gz-los se você quiser manter vários backups anteriores.
O servidor precisa do rsync instalado. Isso será executado no SSH, portanto, você ainda usa a autenticação de chave pública e mantém a criptografia. Você precisará executar este comando como root e ter autenticação de chave pública e logins SSH para raiz ativada para preservar as permissões. Seu destino (ou pelo menos um destino temporário) deve ser um sistema de arquivos do Linux. Se você estiver armazenando esses backups em uma partição FAT ou NTFS (por exemplo, na maioria dos discos rígidos externos), é possível criar um sistema de arquivos de loopback (consulte link ) para armazenamento temporário. O arquivo tar.gz pode ser armazenado em qualquer partição, porque preserva as permissões por conta própria.
Um exemplo de comando rsync:
rsync -a --delete --exclude=/dev --exclude=/sys --exclude=/proc --exclude=/tmp remoteserver.example.com:/ /path/to/backup/destination/
tenha cuidado ao usar --delete, especialmente como root! Ele excluirá quaisquer arquivos no diretório de destino que não existam na origem do backup. Você só deve usar --delete ao sincronizar com um diretório de backup dedicado sendo usado apenas para esse VPS. Você também deve certificar-se de que não há possibilidade de seu script ser sincronizado com o destino errado (por exemplo, se / path / para / backup / destination é determinado por uma variável shell)
O rsync só transfere arquivos diferentes entre a origem e o destino. Se você tiver arquivos grandes, também transferirá apenas partes do arquivo que foram alteradas (para que isso funcione, você deve adicionar o sinalizador -c). Isso significa que você está usando uma largura de banda mínima, mas usará mais CPU e diminuirá os tempos de preparação para a nova sincronização, pois ambos os lados precisam primeiro dos arquivos de soma de verificação para determinar quais blocos transferir. Se você usar o sinalizador -c e tiver arquivos grandes (como arquivos de banco de dados) e / ou uma conexão lenta, considere adicionar --partial --append, que permite retomar as transferências depois que uma conexão for interrompida.