Para um único arquivo em vez de usar SFTP, você poderia enviar o arquivo por ssh usando cat
ou pv
no lado de envio e usando tee
no servidor do meio para enviar os dados para um arquivo lá e enviar uma cópia sobre o outro link ssh do outro lado do qual apenas grava os dados em um arquivo. O vodu exato exigido vou deixar como um exercício para o leitor, como eu não tenho tempo para jogar agora (desculpe). Esse método só funcionaria se o segundo destino fosse publicamente acessível via SSH, o que pode não ser o caso, conforme você o descreve como uma máquina cliente.
Outra abordagem, que é menos "executar e aguardar", mas pode ser mais fácil, usar rsync
entre o servidor e o cliente B. Na primeira vez que você executar isso, poderá obter uma cópia parcial dos dados, mas você pode simplesmente voltar a executá-lo para obter mais dados depois (com uma execução final depois que a transferência do Servidor- > Servidor for concluída). Isso só funcionará se o servidor colocar os dados diretamente no nome de arquivo correto durante a transferência de SFTP (às vezes você verá os dados entrando em um arquivo temporário que é renomeado assim que o arquivo for completamente transferido - isso é feito para arquivo de atualização mais atômica, mas vai tornar a idéia rsync inutilizável). Você também pode usar rsync para a transferência de C1 em vez de scp (se você usar a opção --inplace
para evitar o problema mencionado acima) - usar o rsync também lhe dará proteção contra a necessidade de reenviar tudo se o C1- > A conexão com o servidor apresenta problemas durante uma grande transferência (eu costumo usar rsync --inplace -a --progress <source> <dest>
ao invés de scp / sftp quando o rsync está disponível, para este comportamento de "transferência de currículo").
Para resumir o acima, executando:
rsync --inplace -a --progress <source> user@server:/<destination_file_or_folder>
no client1 e depois em execução
rsync --inplace -a --progress user@server:/<destination_file_or_folder> <destination_on_cli2>
no client2 repetidamente até que a primeira transferência seja concluída (depois, execute mais uma vez para garantir que você tenha tudo). rsync
é muito bom em transferir apenas o mínimo absoluto necessário para atualizar um local em vez de transferir todo o lote de cada vez. Para paranóia, talvez você queira adicionar a opção --checksum
aos comandos rsync (o que levará muito mais tempo de CPU para arquivos grandes, mas não resultará em mais dados sendo transferidos a menos que seja necessário) e para acelerar o --compress
Essa opção ajudará se os dados que você está transferindo ainda não estiverem em um formato compactado.