Transfiera archivos entre dos servidores SSH remotos

21

¿Hay una manera fácil de transferir archivos entre dos servidores SSH / SFTP? La solución perfecta sería FileZilla, pero solo le permite crear una conexión entre local y remoto, pero no entre remoto y remoto.

En teoría de que pudiera abrir dos ventanas de Nautilus y conectarse a algunos ssh://server1/path/to/foldery ssh://server2/path/to/foldery luego simplemente tirar de los archivos de uno a otro lado. Mi experiencia es que esto es muy inestable. La transmisión de archivos en una suma de tamaño de, por ejemplo, 10 MB no es un problema, pero la transferencia de, por ejemplo, 10 GB a menudo provocó que Nautilus se colgara y permaneciera allí necesitando ps -e | grep nautilus-> kill -9 <pid>. También probé lo mismo con Nemo y Caja. Si bien Nemo tiende a ser más estable que los otros dos, todavía no es perfecto y también se rompe de vez en cuando. FileZilla es extremadamente estable, nunca se rompió realmente, pero no es muy flexible debido al hecho mencionado de que solo puede conectarse a un único servidor SSH.

Por supuesto, también podría montar una carpeta con sshfs, pero esta es una solución inconveniente. Demasiado trabajo previo para realizar una transferencia simple.

¿Hay alguna aplicación que pueda manejar transferencias entre dos servidores SSH sin romperse? Perfecto sería algo como FileZilla, que retoma el trabajo nuevamente si se interrumpe la conexión.

Sócrates
fuente
No es una respuesta porque este no es un sitio de recomendación de software, pero he estado usando Beyond Compare (comercial) ( scootersoftware.com ) durante años, y es genial para este tipo de tarea. Ofrece dos ventanas, las cuales pueden mostrar una ruta local o un sftp: // URL, mostrará las diferencias entre las carpetas, y su capacidad para copiar solo las diferencias hace un excelente mecanismo de reanudación si se rompe, lo que ocurre muy raramente en mi experiencia. (No afiliado con ellos, excepto ser un cliente satisfecho).
Guntram Blohm apoya a Monica

Respuestas:

36

Si está en una versión de Ubuntu que todavía es compatible, entonces su scpcomando proporcionará el -3interruptor que permite copiar archivos de remote1 a remote2 a través de localhost :

me@local:~> scp -3 user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

También puede omitir el -3cambio, pero luego necesitará la clave pública ( id_rsa.pub) de user1@remote1en el archivo authorized_keysde user2@remote2:

me@local:~> scp user1@remote1:/path/to/file1 user2@remote2:/path/to/file2

scpluego debajo del capó se hace un ssh user1@remote1primero y a partir de ahí scp /path/to/file1 user2@remote2:/path/to/file2. Es por eso que la credencial debe distribuirse de manera diferente a la -3solución.

En otras palabras:

  • scp -3 remote1:file1 remote2:file2transfiere el archivo de remote1 a localhost y luego de nuevo a remote2 . Los datos viajan remote1 → localhost → remote2 . El localhost es la tercera parte en este escenario, por lo tanto -3. Para que esto funcione, necesitará las credenciales de localhost en remote1 y remote2 porque localhost se conecta a ambos.

  • scp remote1:file1 remote2:file2copia el archivo directamente de remote1 a remote2 a la velocidad con la que están conectados entre sí. localhost no está involucrado aquí (además de emitir el comando). Los datos viajan remoto1 → remoto2 . Para que esto funcione, necesitará las credenciales de localhost solo en remote1 pero además necesita las credenciales de remote1 en remote2 porque localhost se conecta a remote1 solamente y luego remote1 se conecta a remote2 .

Si es posible, elegiría el segundo enfoque. Como algunos comentarios ya dicen: por lo general, el cable de red entre remote1 y remote2 es mucho más grueso que el cable entre ellos y localhost .

PerlDuck
fuente
2
Eso es simplemente hermoso. ssh es la navaja suiza del software. Gracias, aprendí algo.
Mármol orgánico
44
Tenga en cuenta que este enfoque, al igual que el enfoque nautilus descrito en la pregunta, transferirá el archivo primero a la máquina local y luego al segundo servidor. Esto causará una desaceleración significativa cuando los dos servidores remotos tengan un enlace más rápido entre ellos que la máquina local. (Por ejemplo, cuando los servidores remotos están en centros de datos y la máquina local tiene una conexión DSL).
Stobor,
1
@Stobor Buen punto, gracias. Actualicé mi respuesta para aclarar un poco cómo viajan los datos con y sin el -3.
PerlDuck
1
¿Funcionaría el segundo método con el reenvío de agente, sin tener ninguna clave o contraseña en el control remoto1?
Eric Duminil
1
@EricDuminil Me temo que no puedo decirlo. No tengo experiencia real con el reenvío de agentes. Pero lo dudo porque se supone que remote1 denegará el acceso cuando no se proporcionen clave ni contraseña, ¿no?
PerlDuck
10

En la mayoría de los casos, dos servidores ssh pueden comunicarse entre sí (o al menos uno puede comunicarse con el otro), y nuevamente en la mayoría de los casos, la Internet de la estación de trabajo es mucho peor que cualquiera de los servidores.

Si es así, ordenar el traslado de un servidor al otro es el camino a seguir.

ssh server1 nohup scp somefile server2:somefile

Verifique nohup.outen el servidor1 si hay errores.

Si la accesibilidad del servidor es al revés, puede revertir qué máquina es la maestra:

ssh server2 nohup scp server1:somefile somefile
Joshua
fuente
7

Tal vez podría usar uno de varios front-end GUI para rsync:

¿Hay alguna aplicación GUI para el comando rsync?

O tal vez podría usar rsync directamente desde la línea de comandos para conectarse a ambos servidores remotos:

"Cómo sincronizar archivos entre dos controles remotos"

A menudo inicio sesión en un servidor con ssh, luego, desde la línea de comandos de ese servidor, uso rsync para empujar o extraer archivos al otro servidor remoto , que generalmente es mucho más rápido que tratar de transferir los archivos a través de una tercera computadora.

El rsync es lo suficientemente inteligente como para hacer algo de trabajo, luego, si algo sale mal e interrumpe el proceso, luego puede reanudarse justo donde lo dejó.

David Cary
fuente
0

Necesita usar el protocolo SCP. scp file you want to transfer login@address_of_second_server:/path_where_you_want_to_save

Gravemind
fuente
2
OP quiere copiar archivos entre dos computadoras remotas, no desde una computadora local a una computadora remota. También parece estar buscando una solución GUI.
user68186
@ user68186 mi respuesta es válida.
Gravemind