Backup Linux

Considero essa forma a mais eficiente e elegante de se fazer um backup. Pois é um backup automático incremental com controle de versão e gera logs para controle/monitoramento.

Utilizo para isso os softwares LIVRES: SSH, CRON, RSYNC. A ideia é ter dois servidores o de produção e o de backup, o servidor de backup deve fazer semanalmente uma copia de varias pastas do servidor da produção. Cada copia deve ser datada e ter um arquivo do log da copia também datado. Essas copias são na verdade copias com hardlink do Linux a ideia é copiar o conteúdo do ultimo backup para um nova pasta com “cp -l ” e depois atualizar ela com o servidor usando o rsync, assim teremos um backup incremental e versionado por data! Sem falar que economizamos muito espaço em disco, banda de rede e tempo de backup com esse procedimento.

ver : http://www.vivaolinux.com.br/artigo/Backups-remotos-com-rSync-e-chaves-SSH

Por partes:

1 – SSH com autenticação via chaves publica/privada:

http://ramonrdm.wordpress.com/2011/08/16/autenticacao-com-chaves-publicaprivada-no-ssh/

2 – Instalação do Rsync:

4 – Criação do script de backup

bkp incremental hardlinks:

#!/usr/bin/env bash
#
# Faz backups incrementais de diretorios em um servidor remoto utilizando rsync e
# hardlinks para economia de banda e espaço em disco.
#
# Por Vinicius Figueiredo <viniciusfs [arroba] gmail.com>
# Dominio Publico
#

SERVER="servidor.com.br"
DIRS_TO_COPY="/var/www /etc"
BACKUP_DIR="/backup"
RETENTION=15

DATE=`date +%Y%m%d`
LOG="${0}_${DATE}.log"

CURRENT_BACKUP="${BACKUP_DIR}/${DATE}"

echo "Iniciando script em `date`" > ${LOG}

if [ -e ${BACKUP_DIR}/last ]; then
    LAST_BACKUP=`cat ${BACKUP_DIR}/last`

    if [ -d ${LAST_BACKUP} ]; then
        echo "Ultimo backup encontrando, linkando arquivos..." >> ${LOG}
        cp -la ${LAST_BACKUP} ${CURRENT_BACKUP} >> ${LOG} 2>&1
    fi
else
    echo "Nenhum backup anterior encontrado, criando diretorio para backup atual..." >> ${LOG}
    mkdir ${CURRENT_BACKUP} >> ${LOG} 2>&1
fi

for dir in ${DIRS_TO_COPY}; do
    echo "Iniciando backup de ${SERVER}:${dir}" >> ${LOG}
    rsync -av --delete ${SERVER}:${dir} ${CURRENT_BACKUP} >> ${LOG} 2>&1
done

echo ${CURRENT_BACKUP} > ${BACKUP_DIR}/last

for dir in `find ${BACKUP_DIR} -maxdepth 1 -type d -mtime +${RETENTION}`; do
    echo "Removendo backup ${dir}" >> ${LOG}
    rm -rf ${dir} >> ${LOG} >> ${LOG} 2>&1
done

5 – Automatizando o backup com o Cron

http://ramonrdm.wordpress.com/2011/09/06/cron-agendando-tarefas/

Usando rsync:

http://servidorlinux.wordpress.com/2008/02/02/backup-com-rsync-sem-senha/

http://www.dicas-l.com.br/arquivo/como_programar_backup_com_rsync_e_cron_de_maneira_rapida_e_simples.php

http://www.vivaolinux.com.br/artigo/Backup-com-Rsync

http://www.vivaolinux.com.br/artigo/Sistema-de-backup-com-rsyncd

Incremental:

http://www.ultrav.com.br/2008/11/11/backup-incremental-com-rsync-e-hardlinks/

http://blog.liquuid.net/2008/05/11/time-machine-no-linux-com-rsync/

outra opcao:

http://www.dicas-l.com.br/arquivo/script_shell_de_backup_incremental.php

http://www.dicas-l.com.br/cantinhodoshell/cantinhodoshell_20070130.php

http://www.vivaolinux.com.br/script/Backup-Remoto-com-rsync-automatico-para-varias-maquinas-sem-senha./

http://www.jveweb.net/en/archives/2011/02/using-rsync-and-cron-to-automate-incremental-backups.html

Autenticação com chaves Publica/Privada no SSH

Autenticação com chaves Publica/Privada no SSH

Para que não seja mais necessário colocar senha toda vez que você conecta a um servidor ou para viabilizar backups automaticos que utilizam conexão SSH. Você pode utilizar a autenticação por PublicKey com chaves privadas e publicas!

Geramos no host as chaves publica e privada:

$ ssh-keygen -t rsa

isso irá gerar as chaves id_rsa (privada) e id_rsa.pub (publica) ambas em ~/.ssh

Agora vamos copiar a chave publica para o servidor com um comando só:

$ ssh-copy-id -i ~/.ssh/id_rsa.pub login@servidor

Pronto! Agora vamos aplicar algumas permissões no servidor:

$ chmod 600 ~/.ssh/authorized_keys

$ chmod 700 /home/usuario/.ssh

$  chmod 700 /home/usuario

Agora, configure o arquivo /etc/ssh/sshd_conf para usar as chaves de autenticação. Certifique-se de que as linhas a seguir estão descomentadas:

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile %h/.ssh/authorized_keys
Reinicie o servidor caso faça essas auterações.
Para verificar o que acontece durante a conexao:

ssh -v login@servidor (para ver as mensagens)

ssh -vvv login@servidor (para ver TODAS as mensagens)

# rsync -Pav -e "ssh -i $HOME/.ssh/somekey" username@hostname:/from/dir/ /to/dir/
Fontes:

https://unix.stackexchange.com/questions/127352/specify-identity-file-id-rsa-with-rsync

http://blogdonerd.com.br/2010/09/estabelecendo-relacao-de-confianca-ssh-entre-servidores-linux/
http://www.hardware.com.br/tutoriais/dominando-ssh/pagina5.html
http://www.dicas-l.com.br/arquivo/logando_com_seguranca_num_servidor_ssh_sem_uso_de_senha.php
http://segurancalinux.com/artigo/Dicas-avancadas-de-seguranca-para-SSH
http://focalinux.cipsga.org.br/guia/avancado/ch-s-ssh.htm
http://www.zago.eti.br/ssh/ssh-sem-senha.txt
http://www.debian.org/doc/manuals/debian-reference/ch-tune.pt-br.html
https://www.cs.indiana.edu/Facilities/FAQ/Security/openssh.html
http://atitudereflexiva.wordpress.com/2011/02/13/ssh-com-chave-publica/
http://www.debian.org/doc/manuals/debian-reference/ch-tune.pt-br.html
fontes de configuração:
http://www.hugoazevedo.eti.br/html/sshd.html
http://www.hugoazevedo.eti.br/html/ssh.html