Como você faria para fazer backup de um Ubuntu VPS remoto via SSH?

4

Então, como eu disse, eu tenho um VPS, Raspberry Pi e um plano, mas estou precisando de alguns conselhos, então aqui vai.

Eu tenho um VPS com o prgmr.com, que eu executo bem e sem problemas. Eu também tenho um novo RaspberryPi sentado na minha mesa, com Raspberrian baixando enquanto digito. Meu plano é usar o Raspberry Pi como um servidor de backup em casa, então minha pergunta é:

Como você faria o backup de um Ubuntu VPS remoto via SSH?

O VPS é configurado como um servidor web, mas eu gostaria de configurar um cron job no Pi para que ele possa logar automaticamente no VPS e rodar e baixar um backup, apenas caso eu consiga resolver o problema ou acontece outra coisa que resulta em perda de dados. Naturalmente eu quero que este backup contenha tudo para que eu possa restaurar rapidamente todo o servidor, tudo bem configurado como está agora, se as coisas correrem mal.

Como você executaria esse tipo de backup? Eu imaginei que eu teria que escrever algum tipo de script para o SSH, comprimir todos os arquivos relevantes em um tar.gz ou similar e fazer o download das imagens do SCP.

Quais são seus pensamentos sobre isso? Quais pacotes etc você usaria e como você os configuraria? O VPS tem uma pilha LAMP ligada, então quais arquivos você pretende fazer backup? Ele também tem muitos outros programas menores, como GIT e ZendTools instalados.

    
por Daniel Groves 20.07.2012 / 22:57

1 resposta

5

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.

    
por undecim 20.07.2012 / 23:35