SFTP: verificar se foi baixado corretamente

0

Eu preciso baixar alguns dados de alguma conexão SFTP e excluir se no FTP depois. Mas tenho que ter certeza de ter baixado os dados corretamente.

No momento, apenas faço isso no meu script executado por um cron:

sftp -oIdentityFile=key user@server <<EOF
    mget -r *
    mdelete *
    bye
EOF

Mas eu me preocupo que, se um download for interrompido devido a qualquer motivo, os arquivos serão excluídos de qualquer maneira, já que a conexão FTP apenas funciona com o próximo comando sem interromper a conexão após uma ação com falha.

Eu preciso ter certeza de que os arquivos foram baixados corretamente, o melhor seria uma comparação de hash. Mas como duvido muito que o FTP ofereça essa função, qual seria a melhor solução para resolver esse problema?

SE NÃO for possível: Pode ser uma solução para deixar todos os arquivos no servidor FTP e baixar os novos. Esta parece ser uma solução mais fácil. Algum conselho para esta solução?

EDITAR: Como não tenho nenhuma influência sobre o servidor, estou procurando a solução mais prática para ter certeza de baixar todos os arquivos antes que eles sejam excluídos. Eu não estou muito preocupado com a integridade dos dados em si (eu confio no ssh lá).

    
por Xali 28.12.2017 / 16:47

1 resposta

1

Scripts simples de sftp como o seu são bons para buscar scripts rápidos e sujos, mas são um desastre esperando para acontecer quando você os usa para também excluir arquivos (especialmente exclusões curinga).

Um perigo muito óbvio com o script é que mdelete * excluirá não apenas os arquivos que estavam no diretório quando você executou mget -r * , mas também tudo o que foi carregado no diretório de origem após ter iniciado o mget - até arquivos que não foram incluídos no mget .

Existem várias outras alternativas (mais seguras) para você. Aqui estão dois:

  1. Use sshfs para montar o diretório sftp em algum lugar do sistema. Então você pode usar comandos unix padrão como cp , mv , rm , rsync etc para mover arquivos. Esta é de longe a sua melhor opção.

  2. Escreva um programa em uma linguagem que tenha uma biblioteca sftp (por exemplo, perl ou python. e os idiomas compilados mais atuais e atuais também) para se conectar ao servidor remoto e:

    • obtenha uma lista de arquivos para transferir
    • para cada arquivo:
      • faça o download
      • validar de alguma forma (por exemplo, como @thrig sugerido com um arquivo md5sum ou similar)
      • se estiver tudo bem, exclua-o do servidor remoto
por 28.12.2017 / 17:33

Tags