Automatizando a transferência de arquivos usando scripts Bash no SSH no meu novo servidor do servidor antigo [duplicado]

0

Como posso me conectar a um host remoto usando SSH e criar um script Bash para copiar todos os arquivos e pastas do meu servidor antigo para o novo servidor para backup todos os dias?

    
por Anirban Ghosh 02.04.2018 / 13:46

1 resposta

2

Configurar a autenticação ssh baseada em chave

Primeiro, você precisa gerar uma chave ssh. Na máquina da qual você está se conectando, execute:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/vidarlo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/vidarlo/.ssh/id_rsa.
Your public key has been saved in /home/vidarlo/.ssh/id_rsa.
The key fingerprint is:
SHA256:/jxfxiWiao0m7YG9MiHgXBFKoo7kJcgTOrPtAZNtpVg [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|..E o.           |
|=B.+.            |
|@==. .           |
|=O= .            |
|o=oo    S   . . .|
| .o.. .+   . o o |
|  .  ..o+o.   +  |
|      + =*o  o   |
|       B+ oo.    |
+----[SHA256]-----+
[~]$ 

Basta pressionar enter quando solicitado; os locais padrão e nenhuma senha é OK.

Isso gerará uma chave privada e pública. O próximo passo é copiar a chave pública para o servidor remoto, para que possa ser usada. ssh-copy-id pode ser usado para isso:

$ ssh-copy-id user@host
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/vidarlo/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
user@host's password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'user@host'"
and check to make sure that only the key(s) you wanted were added.

Nesta fase, você poderá executar ssh user@host e fazer login sem inserir uma senha.

Trabalho de backup

Você quer um simples scp. Isso é ruim por vários motivos:

  1. Você não recebe nenhum histórico. Se um arquivo for sobrescrito por engano, e você não o descobrir antes da próxima tarefa de backup, o scp sobrescreverá felizmente o conteúdo.
  2. Você precisa copiar todo o conteúdo todas as noites.
  3. Você não recebe um relatório de status.
  4. Se uma tarefa de backup não for concluída a tempo, você corre o risco de ter duas tarefas de backup gravando no mesmo conteúdo.

Mas, de qualquer maneira. Isso pode ser feito, desde que você esteja ciente das ressalvas. Use crontab -e para editar seus usuários crontab. Inserir uma linha como esta:

0 5 * * * /usr/bin/scp "/path/to/backup" "user@remote:/path/to/store/backups"

Este comando será executado todas as noites às 05:00. Isso pode ser alterado se você desejar. A explicação dos campos é a seguinte:

  1. minutos, 0-60. 0 significa executá-lo em xx: 00, * significa executá-lo a cada minuto
  2. horas, 0-23. 02 significa 02: xx. * significa toda hora.
  3. Dia do mês, 1-31. * significa todos os dias.
  4. Mês, 1-12. * é todo mês
  5. Dia da semana, 1-7.
por vidarlo 02.04.2018 / 14:50