Para um único arquivo, em vez de usar SFTP, você pode canalizar o arquivo pelo ssh usando cat
ou pv
no lado de envio e tee
no servidor do meio para enviar os dados para um arquivo lá e enviar uma cópia pelo outro link ssh do outro lado. apenas grava os dados em um arquivo. O vodu exato exigido deixarei como um exercício para o leitor, pois não tenho tempo para jogar agora (desculpe). Esse método funcionaria apenas se o segundo destino estiver acessível ao público 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 que pode ser mais fácil, pode ser usada rsync
entre o servidor e o cliente B. Na primeira vez em que você executa, pode obter uma cópia parcial dos dados, mas é possível executar novamente para obter mais dados posteriormente (com uma execução final quando a transferência do Cliente1-> Servidor estiver concluída). Isso funcionará apenas se o servidor colocar os dados diretamente no nome correto do arquivo durante a transferência SFTP (às vezes, você verá os dados entrando em um arquivo temporário que será renomeado assim que o arquivo for completamente transferido - isso é feito para atualização do arquivo mais atômica, mas inutiliza a idéia rsync). Você também pode usar o rsync para a transferência C1-> S em vez do scp (se você usar o--inplace
opção para evitar o problema mencionado acima) - o uso do rsync também protegeria contra a necessidade de reenviar tudo se a conexão C1-> Server apresentar problemas durante uma grande transferência (eu costumo usar em rsync --inplace -a --progress <source> <dest>
vez de scp / sftp quando o rsync estiver disponível, por 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 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 novamente 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 a cada vez. Para a paranóia, você pode querer adicionar a --checksum
opção aos comandos rsync (o que levará muito mais tempo da CPU para arquivos grandes, mas não resultará na transferência de mais dados a menos que seja necessário) e, para velocidade, a --compress
opção ajudará se os dados você está transferindo ainda não está em um formato compactado.