Para un solo archivo en lugar de usar SFTP, puede canalizar el archivo a través de ssh usando cat
o pv
en el lado de envío y usando tee
en el servidor central para enviar los datos a un archivo allí y enviar una copia sobre el otro enlace ssh al otro lado del cual solo escribe los datos en un archivo. El vudú exacto requerido lo dejaré como ejercicio para el lector, ya que no tengo tiempo para jugar en este momento (lo siento). Este método solo funcionaría si el segundo destino es de acceso público a través de SSH, lo que puede no ser el caso, ya que lo describe como una máquina cliente.
Otro enfoque, que es menos "ejecutar y esperar" pero que de otro modo puede ser más fácil, es usarlo rsync
entre el servidor y el cliente B. La primera vez que ejecute esto, puede obtener una copia parcial de los datos, pero puede volver a ejecutar para obtener más datos después (con una ejecución final una vez que se complete la transferencia Cliente1-> Servidor). Esto solo funcionará si el servidor coloca los datos directamente en el nombre de archivo correcto durante la transferencia SFTP (a veces verá que los datos van a un archivo temporal que luego se renombra una vez que el archivo se transfiere por completo; esto se hace para la actualización del archivo es más atómica pero hará que la idea de rsync sea inutilizable). También puede usar rsync para la transferencia C1-> S en lugar de scp (si usa--inplace
opción para evitar el problema mencionado anteriormente): el uso de rsync también le daría protección contra la necesidad de reenviar todo si la conexión C1-> Server experimenta problemas durante una transferencia grande (tiendo a usar en rsync --inplace -a --progress <source> <dest>
lugar de scp / sftp cuando rsync está disponible, por este comportamiento de "currículum de transferencia").
Para resumir lo anterior, ejecutando:
rsync --inplace -a --progress <source> user@server:/<destination_file_or_folder>
en el cliente1 y luego en ejecución
rsync --inplace -a --progress user@server:/<destination_file_or_folder> <destination_on_cli2>
en client2 repetidamente hasta que se complete la primera transferencia (luego se ejecuta una vez más para asegurarse de que tiene todo). rsync
es muy bueno para transferir solo el mínimo absoluto que necesita para actualizar una ubicación en lugar de transferir todo el lote cada vez. Para la paranoia, es posible que desee agregar la --checksum
opción a los comandos rsync (que tomará mucho más tiempo de CPU para archivos grandes pero no generará una transferencia de datos significativamente mayor a menos que sea necesario) y para la velocidad, la --compress
opción ayudará si los datos que está transfiriendo aún no está en formato comprimido.