SSH back ups automáticos

16

Eu tenho duas máquinas, A e B . Máquina A pode ssh em B . A tem muito espaço livre. Os dados de B estão em uma situação de risco. Como faço backup de todos os dados de B para A automaticamente. Não precisa ser muito frequente, mas deve ser sem as mãos. Toda vez que A inicializa seria bastante freqüente. Eu ouço a sincronização pode fazer isso.

    
por PyRulez 05.04.2014 / 15:23

6 respostas

11

Para fazer isso diariamente na maioria das distribuições Linux, você deve ser capaz de colocar apenas o comando rsync (conforme @ resposta do guido ) em um script e coloque o script no diretório /etc/cron.daily . Enquanto anacron estiver instalado (pode não ser por padrão), todos os trabalhos cron.daily perdidos serão capturados na próxima vez que a máquina inicializar (assim como serão executados à meia-noite se a máquina for trocada).

Para o script que você acabou de fazer:

#!/bin/sh
rsync -a user@serverB:/source/folder/ /destination_folder

Você pode adicionar a opção -z (compactação) se o backup estiver em uma conexão lenta (ish) ou se desejar economizar largura de banda, mas na minha experiência prejudicará o desempenho com máquinas / redes modernas.

Se você quiser manter o log de cada backup, você pode fazer algo como:

#!/bin/sh
rsync -av user@serverB:/source/folder/ /destination_folder \
  >/var/log/backup_log 2>&1

Note que para isso funcionar como um cron job, você deve ter ssh sem senha configurado para root no servidorA para efetuar login no servidorB. Deve ser a conta raiz (ou seja, chaves em /root/.ssh ), pois cron.daily jobs são executados como root.

    
por 05.04.2014 / 16:07
5

Sugiro usar o rdiff-backup . Eu o uso agora para fazer backups incrementais automáticos toda noite dos meus próprios dados (duas estações de trabalho, dois servidores e uma conta no servidor de outra pessoa).

Eu usei rsync anteriormente para isso, mas mudei para rdiff-backup, já que é mais conveniente, e pode fazer backups incrementais de arquivos grandes, como imagens de disco de máquinas virtuais. O rdiff-backup é muito parecido com meus scripts anteriores de backup do rsync, mas é feito direito .

Eu coloquei um arquivo de script em /etc/cron.daily na máquina onde o backup está armazenado, que inicia o rdiff-backup uma vez todos os dias no início da manhã e busca os dados de a máquina remota.

    
por 06.04.2014 / 08:01
4

Além de todas as respostas anteriores, aqui está uma que conta com chaves SSH com restrições sobre o que pode ser feito quando você faz login com essa chave.

No servidor A

Neste, é menos importante se você criar um usuário separado ou usar um dos seus nomes de usuário existentes, mas se fosse eu, criaria um usuário separado. Usarei o nome de usuário bkpuser para ambos os servidores em meus exemplos abaixo.

Quando logado em bkpuser , crie uma chave SSH sem uma senha.

No servidor B

Ativar PubkeyAuthentication em sshd_config .

Crie o usuário bkpuser . Defina uma senha muito complicada ou desative o login de senha para esse usuário (exatamente como você faz isso dependerá de qual unix e distro você está executando). O ponto é que o usuário deve efetuar login apenas com uma chave SSH. Certifique-se de que bkpuser tenha acesso de leitura a todos os diretórios e arquivos dos quais você deseja fazer backup.

Copie a parte pública da chave criada em A para ~bkpuser/.ssh/authorized_keys em B. Edite o para executar automaticamente um comando na conexão. Esse comando não deve ser um ponteiro para um script de shell; Em vez disso, insira o shell script diretamente na chave. Inclua também uma limitação para que a chave só possa ser usada no servidor A e em nenhum outro servidor. No exemplo abaixo, estou dando ao servidor A o endereço IP 10.1.2.3 e suponho que os arquivos dos quais quero fazer backup estejam todos em /data .

from="10.1.2.3",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty,command="cd /data;/usr/bin/tar -cf - *; /usr/bin/logger -t BACKUP -p daemon.info \"INFO: Backup-files on $HOST fetched from ${SSH_CLIENT%% *} by $USER\";" ssh-dss AA.....

No servidor A

Se você estiver usando uma das guias cron que suportam @reboot entradas, adicione uma entrada para bkpuser s crontab com o comando ssh -i ~bkpuser/.ssh/id_dsa serverB > backup.tar.gz . Se não permitir, configure-o a qualquer momento - se fossem os meus dados, provavelmente o faria diariamente.

    
por 06.04.2014 / 09:05
2

Aqui está uma solução completa para fazer o backup do servidor B no servidor A todos os dias às 4h usando o SSH.

Crie uma conexão SSH automática do servidor B para o servidor A

ssh-keygen -t dsa -b 1024
ssh-copy-id -i ~/.ssh/id_dsa.pub "-p ssh_port root@server_a"

Crie um script de backup no servidor B

nano / root / backup

# !/bin/sh

# Variables loading
HOST="root@server_a"
PORT=22
DIR="/var/backups/server_b"

# Directories creating
ssh -p $PORT $HOST <<EOF
    mkdir -p $DIR/home
    logout
EOF

# Files backing up
rsync -aze "ssh -p $PORT" --delete /home/user $HOST:$DIR/home

chmod 744 / root / backup

Automatizar o backup no servidor B

crontab -e

0 4 * * * /root/backup > /dev/null

Para mais detalhes, consulte as páginas Conecte-se ao SSH sem entrar uma senha no Linux e Backup de um servidor no Debian ou Ubuntu Linux .

    
por 16.05.2014 / 16:19
1

Você pode usar o rsync para isso (de maneira inversa):

serverA# rsync -avz user@serverB:/path-to-backup.tar.gz /var/backup

onde:

-avz  archive, compress and be verbose
    
por 05.04.2014 / 15:38
-1

O cerne da questão é como fazer isso automaticamente (sem necessidade de inserir senhas):

  • inicie uma screen ou tmux sessão
  • execute eval $(ssh-agent)
  • adicione sua chave com ssh-add
  • sinalizadores para rsync export RSYNC_RSH="ssh -i ~/.ssh/id_rsa ..."
  • backup a cada 24h com while :; do rsync -av u@h:/p /local; sleep $[24*60*60]; done
por 05.04.2014 / 18:49

Tags