Solución 1:
Por mucho, la forma más fácil es simplemente copiarlo a través de scp. Además, esta sintaxis en realidad funciona a diferencia de algunas de las otras sugerencias.
No se puede superar esta sintaxis con facilidad. Le permite copiar recursivamente, rsync o lo que quiera sin la molestia de considerar tuberías potencialmente complejas. Esta sintaxis es intuitivamente clara, será más compatible con los administradores del sistema que lo siguen y no hace un uso inútil de cat.
scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to
Desde la página man de scp:-3
Las copias entre dos hosts remotos se transfieren a través del host local. Sin esta opción, los datos se copian directamente entre los dos hosts remotos. Tenga en cuenta que esta opción desactiva el medidor de progreso.
En el siguiente ejemplo
- Su estación de trabajo se llama MacBook-Pro.
- Dev Jump Box se llama devjumpserver
- El servidor de aplicaciones de desarrollo se llama devapplicationserver
- Está en la zona LAN DNS llamada .local
- QA Jump Box se llama qajumpserver
- El servidor de aplicaciones QA se llama qaapplicationserver
- Está en la zona LAN DNZ llamada .local
- Haremos una copia de prueba de un archivo /etc/hosts de 670 GB;-)
- Se supone que tiene configurada la autenticación de clave pública SSH.
Aquí hay un archivo ~/.ssh/config que configura el acceso directo desde su estación de trabajo a los servidores de aplicaciones a través del salto apropiado (también conocido como servidor bastión).
MacBook-Pro:~ barrychapman$ cat ~/.ssh/config Host * ServerAliveInterval 60 Host devapplicationsever HostName devapplicationserver.local ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p User barrychapman Host qaapplicationserver HostName qaapplicationserver.local ProxyCommand ssh -i ~/.ssh/id_rsa [email protected] -W %h:%p User barrychapman MacBook-Pro:~ barrychapman$
Probando la presencia del archivo en el servidor de destino, no estará allí.
MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts ls: cannot access /tmp/hosts: No such file or directory Killed by signal 1. MacBook-Pro:~ barrychapman$
Ahora copiemos un archivo del servidor de aplicaciones de desarrollo a la aplicación de control de calidad a través de su estación de trabajo.
MacBook-Pro:~ barrychapman$ scp -3 devapplicationserver:/etc/hosts qaapplicationserver:/tmp/ Killed by signal 1. Killed by signal 1. MacBook-Pro:~ barrychapman$
Ahora, verifiquemos la presencia del archivo copiado en el servidor de aplicaciones de control de calidad. Estará allí esta vez.
MacBook-Pro:~ barrychapman$ ssh qaapplicationserver ls /tmp/hosts /tmp/hosts Killed by signal 1. MacBook-Pro:~ barrychapman$
Nota
Al cerrar una conexión ProxyCommand, verá el mensaje de advertencia "Eliminado por la señal 1". Esto es SSH rompiendo la conexión ProxyCommand y no hay nada de qué alarmarse. Puedes deshacerte de él agregando LogLevel Quiet
a la estrofa de configuración del host bastión.
Solución 2:
¡TUBERÍAS!
Si Internet es una serie de tubos, Unix es una serie de conductos, algo así como:
cat ginormous-file | ssh [email protected] "cat | ssh [email protected] \"cat >out\" "
debería funcionar.
Si necesita atravesar más hosts, agregue más tuberías (y más capas anidadas de \
-cita escapada) según sea necesario. (Sin embargo, tenga en cuenta que si la canalización/escape se vuelve tan compleja que tiene que dibujar un diagrama o recurrir a contar con los dedos para determinar cuántas veces tiene que duplicar los escapes, probablemente sea el momento de admitir la derrota y configurar una VPN adecuada !)