Backup remoto via SSH

5

Eu tenho dois computadores, meu local e remoto. Eu quero fazer backup do servidor remoto com o comando tar via ssh, mas salvando o arquivo tar no computador local. É possível?

    
por QkiZ 19.03.2015 / 13:28

2 respostas

3

Aqui estão dois exemplos do que eu faço: um para arquivos e outro para o MySQL. Ambos são soluções de puxar; sua máquina local efetua login em uma máquina remota e recupera arquivos. No entanto, a máquina local informa a máquina remota para preparar o arquivo.

Configurar & Antecedentes

Eu uso crontab e autenticação sem senha com o ssh para arquivar e gzip em uma máquina remota e então direcionar a saída do gzip para a máquina local através do ssh. Certifique-se de que o crontab e a autenticação sem senha estejam configurados. Eu também tenho alguns one-liners de limpeza.

O benefício disso é que ele usa a largura de banda com mais eficiência. A desvantagem é que é mais intensivo em recursos, embora no hardware moderno eu duvide que isso seja importante, a menos que você esteja lidando com arquivos absurdamente grandes.

Fazendo backup de arquivos e diretórios

Esta é provavelmente a parte que você mais gosta. Diga ao ssh para executar um tar e pipe para gzip na máquina remota . Faça com que o gzip grave o arquivo compactado na saída padrão ( c flag) e direcione a saída para um arquivo na sua máquina local .

00 00 * * * /usr/bin/ssh login@host "sudo tar -cf - -C /path/to/directory/to/backup/ file_to_back_up | gzip -9c" > /file/on/local/machine/BackUp_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).tar.gz

Importante: file_to_back_up é o arquivo que você está realmente fazendo backup; pode ser um arquivo ou diretório. Pode ser uma série de arquivos também: file1.txt, file2.php, etc.

O sinalizador 9 é a compactação máxima de gzip.

Os sinalizadores e parâmetro -cf - criam um novo arquivo e os transmitem para a saída padrão. O -C flag diz ao tar para iniciar a partir de um diretório diferente do atual. file_to_back_up pode ser um arquivo ou um diretório. Isso mantém muitos caminhos relativos estranhos fora do arquivo. Se você quiser fazer backup de algo em seu diretório inicial, eu acho que você pode omitir -C /path/to/directory/to/backup/ porque o ssh irá, por padrão, conectá-lo ao seu diretório pessoal.

date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A gerará um timestamp como 2015-03-19-08h58m09s_Thursday

As colunas crontab 00 00 * * * significam basicamente meia-noite todos os dias.

Fazendo backup de um banco de dados MySQL

Semelhante ao acima. A ressalva é que você precisa ter certeza de que seu acesso ao mysql também pode ser sem senha; a maneira segura de fazer isso é com arquivos .cnf. Pule esta seção se você não usa o MySQL, mas o conceito pode passar para outras ferramentas.

30 0,13 * * * /usr/bin/ssh [email protected] "mysqldump --defaults-file=.my.database.cnf -uroot databasename | gzip -9c" > /path/to/databasebackup_$(date +\%Y-\%m-\%d-\%Hh\%Mm\%Ss_\%A).sql.gz

O arquivo .cnf contém credenciais de login para que você não precise passá-las pelo shell para que elas apareçam em ps para que outros usuários possam ver. Deve conter:

[client] user=mysqluser password=yourpassword host=localhost

Dependendo da sua configuração, você pode querer um monte deles para diferentes projetos / bancos de dados. Se você não fizer isso, o arquivo .my.cnf será usado por padrão.

Segurança: você provavelmente quer fazer chmod 600 *.cnf para que somente o proprietário possa ler e gravar neste arquivo.

Limpeza

Eu tenho a tendência de excluir automaticamente os backups com mais de cinco dias com o comando find , a menos que eles caiam na sexta-feira. Eu arquivar sexta-feira mais. É por isso que incluo o dia da semana em meus nomes de arquivos.

    
por 19.03.2015 / 15:24
2

sim, alguns exemplos:

tar cvjf - * | ssh user@host "(cd /desired/path; tar xjf -)"
tar cvzf - dir/ | ssh user@host "cat > /backup/dir.tar.gz"
tar cvzf - dir/ | ssh user@host "dd of=/backup/dir.tar.gz"
ssh user@host "cat /backup/dir.tar.gz" | tar xvzf -
tar cvjf - * | ssh root@host "(cd /desired/path; tar xjf - )"

Para fazer backup do computador remoto e salvar o tar no computador local

ssh user@host "(cd /desired/path; tar cvzf - *)" > /path/to/backup.tar.gz

outros exemplos de uso: link

    
por 19.03.2015 / 13:33

Tags