você está aqui: Home  → Arquivo de Mensagens Programação Shell Linux: Inscrições Abertas

Backup's remotos com tar, bzip2 e ssh com autenticação por chaves públicas.

Colaboração: Rubens Queiroz de Almeida

Data de Publicação: 14 de Dezembro de 2004

A maioria dos administradores de redes precisam utilizar alguma ferramenta de backup. No meu caso eu utilizo o comando tar para concatenar, juntamente com o bzip2 para compactar os arquivos e o ssh para fazer a transferência dos mesmos remotamente.

Este trio pode ser utilizado de várias formas, mas prefiro utilizar todos em uma linha única de comando.

*Apesar da facilidade tem que se levar em consideração que a autenticação por chaves assimétricas esteja configurada (sem utilização de senha) e funcionando no servidor que irá receber os backups.*

O macete é o seguinte: O comando tar tem uma opção que vc. pode utilizar para especificar um shell remoto para ele ( --rsh-command ), com isto ao invés de utilizarmos um shell inseguro como o rsh, usamos o ssh.

Vamos lá então:

Para compactar e enviar o arquivo para uma máquina remota:

tar cjvf usuario@servidor.com.ssh:local_onde_guardara_o_backup.tar.bz2 /home --rsh-command=/usr/bin/ssh

pode-se aprimorar ainda mais isso, utilizando a opção —include-files e --exclude-files do tar, para um backup mais enxuto, digamos assim.

Veja um script de exemplo:

#!/bin/bash
#############################################################################
# Script bkp.sh                                                             #
# Forma de execução:                                                        #
#       $PATH/bkp.sh [USER] [HOST] [INCLUDE-FILE] [ABSOLUTE PATH SSH] & 2>&-#
#                                                                           #
# Breve descrição:                                                          #
# Este script efetua o backup dos diretórios existentes no arquivo          #
# [INCLUDE-FILE] para a o usuário e máquina especificado em [USER]          #
# e [HOST] respectivamente.                                                 #
# Aceita-se ainda o parâmetro [ABSOLUTE PATH SSH]. Caso ele não seja especi-#
# ficado assume-se que o arquivo seja "usr/bin/ssh"                         #
#                                                                           #
# OBS: Este script usa autenticação por chaves públicas SSH sem senha       #
#                                                                           #
# by Edson Flávio de Souza edson.flavio@ufpr.br                             #
# versão 1.0                                                                #
#############################################################################

#set -x

###Usuário remoto que será usado para receber o backup
USER=${1-usuario}

###Host remoto que será usado para receber o backup
HOST=${2-host}

###Nome do arquivo remoto que será gerado o backup
FILENAME=backup.$HOST.$(date +%d%m%Y).bkp

###Nome do arquivo onde fica a relação de diretórios a serem "backupeados"
INCLUDE=${3:-include.txt}

###Local onde fica o binário do ssh
SSH=${4:-/usr/bin/ssh}

###Local onde fica o binário do tar
TAR=/bin/tar

###Parâmetros a serem usados para compactação com o tar (o "c" e o "f" são essenciais)
###Aqui estou usando o bzip opção "j"
TARPARM=cjf

###Endereço para onde deve ser enviado e-mail's com erro
EMAIL=root@localhot

### Efetuando o Backup

$TAR $TARPARM $USER@$HOST:$FILENAME --rsh-command=$SSH -T $INCLUDE 2>&-

if [ $? -ne 0 ]; then
{
   mail -s "Erro no Backup da máquina $HOST em $(date +%d/%m/%Y)" $EMAIL
   exit 1
}; fi

### Removendo arquivos de backups antigos

$SSH $USER@$HOST '(cd ~/backups/; DATA=``date --date="15 days ago" +%d%m%Y``; rm *.$DATA.bkp)';


if [ $? -ne 0 ]; then
{
   mail -s "Erro remoção arq. ant. host $HOST em $(date +%d/%m/%Y)" $EMAIL
   exit 1
}; fi


Veja a relação completa dos artigos de Rubens Queiroz de Almeida