Movendo arquivos entre hosts usando área de armazenamento intermediário

Movendo arquivos entre hosts usando área de armazenamento intermediário

Existe alguma boa solução existente para mover arquivos do host A para o host C, usando o host B como uma área de armazenamento intermediário passivo.

A -> B -> C

Limitações

  • O host A e o host C estão em redes separadas e não podem acessar um ao outro. Nenhum túnel pode ser aberto entre A e C.
  • Tanto o host A quanto o host C podem executar e agendar processos periódicos.
  • O host B fornece apenas uma área de armazenamento e pode ser acessado tanto do host A quanto do host C por meio de SSH.
  • B será “passivo” e fornecerá apenas a área de armazenamento.
  • Assim, A atuará como escritor (de arquivos em B) e C atuará como leitor (de arquivos em B).
  • Os arquivos copiados com sucesso do host A para o host C (via B) podem então ser excluídos no host A.
  • Nenhum arquivo no host A deve ser excluído até que haja uma garantia (um recibo contendo uma soma de verificação do arquivo?) de que ele chegou com sucesso ao host C.
  • Casos extremos incluem gerenciamento de tempo de inatividade da rede, disco cheio, processos interrompidos, etc.

O objetivo é, em intervalos regulares, mover arquivos de A para C, utilizando B como área intermediária de armazenamento.

Podemos assumir que todos os hosts estão executando Unix/Linux. Ferramentas preferidas: ssh/rsync/bash + outras ferramentas "padrão".

Eu estava pensando em criar uma solução usando alguns scripts bash em torno do rsync em duas etapas e usando recibos contendo somas de verificação para detectar quando um arquivo foi movido com êxito até o fim.

Existem soluções existentes?

Responder1

Não vejo necessidade de armazenar nada em B, você pode simplesmente usá-lo para fazer proxy de conexões entre A e C usando qualquer software proxy, como encaminhamento de porta ssh ou meias. Talvez você possa até rotear/nat através de B?

Ou, como você pediu especificamente, para fazer do seu jeito, você pode usar o NFS/Samba para copiar os arquivos e verificar a conclusão usando vários métodos. O que me vem à mente seria ter um arquivo criado no compartilhamento para passar mensagens do tipo "cópia concluída" ou "ok para excluir" entre os dois sistemas. Ou como você disse, algo com MD5, etc... Seja como for, tenho certeza que será um trabalho personalizado. Mas não é difícil. Duvido que existam maneiras de lidar com o seu problema dessa maneira.

Responder2

O comentário de Sven à sua pergunta é definitivamente a maneira certa de fazer isso.

Você pode fazer assim:

  1. Do ASSH para B, criando um túnel na porta 5000

    ssh someuser@B -L 5000:127.0.0.1:5000
    
  2. A partir desse shell B, SSH para Ccriar um segundo túnel terminando no Cservidor ssh de.

    ssh someuser@C -NL 5000:127.0.0.1:22
    
  3. A partir de um segundo terminal A, sincronize novamente seus arquivos diretamente paraC

    rsync -avz -e "ssh -p 5000" --progress --remove-source-files /source/directory [email protected]:/destination/directory
    

Pode até ser possível configurar os túneis nas etapas 1 e 2 com um comando, mas no teste rápido que fiz não consegui. Pode ser necessário configurar chaves ssh em Be C.

Se você pretende automatizar o processo de cópia, talvez seja necessário procurar algo comoautosshpara configurar e desmontar os túneis para você por meio de serviços. Ou você pode fazer isso via cron.

informação relacionada