SCP entre dos redes

12

Necesito transferir un archivo entre dos computadoras que no están conectadas a la misma red. Tengo una tercera computadora que puede ver ambas redes a través de una VPN.

Desde la tercera computadora, puedo hacer:

scp root@firstcomputer:./file ./

Y termine la transferencia con la siguiente oración:

scp ./file root@secondcomputer:./

Pero no puedo hacerlo en una sola línea, de la siguiente manera:

scp root@firstcomputer:./file root@secondcomputer:./

La respuesta de error es

ssh: connect to host secondcomputer port 22: No route to host
lost connection

Me doy cuenta de que probablemente se deba a que firstcomputer no puede ver a secondcomputer. ¿Es posible darle a SCP un parámetro que trate con el hecho de que la máquina que ejecuta el programa SCP es la única que puede ver ambas computadoras?

Por cierto, la tercera computadora es una Mac con Lion y la primera y la segunda ejecutan Debian.

JorgeO
fuente

Respuestas:

3

Debería poder usar un túnel SSH.

Suponiendo que está intentando transferir un archivo desde una computadora remota ("remota") a su computadora local ("local"), establezca el túnel a través de la tercera computadora ("puerta de enlace") escribiendo esto en su computadora local:

ssh -fNL 12345:remote:22 gatewaylogin@gateway

Luego puede ejecutar una cantidad ilimitada de comandos SCP en este túnel (aún escribiendo en su computadora local):

scp -P 12345 remotelogin@localhost://path/to/remote/file /local/path/where/you/want/file

Acabo de probar esto en mi red, y funcionó perfectamente.

El método anterior está bien si la red remota es segura, pero si no es segura, necesitaría establecer un túnel entre local y puerta de enlace, y otro túnel entre puerta de enlace y remoto, uniendo los dos por un número de puerto común.

mantipula
fuente
21

La opción scp -3 debería ser lo que estás buscando. Para ponerlo en tu ejemplo:

scp -3 root@firstcomputer:./file root@secondcomputer:./

Tenga en cuenta que la opción -3 se introdujo por primera vez en OpenSSH 5.7, que se lanzó a principios de 2011.

andol
fuente
Mi scp no implementa -3 cuando ejecuto el comando y obtengo scp: opción ilegal - 3 uso: scp [-1246BCEpqrv] ...
JorgeO
1
Eso es correcto. -3 solo está disponible en la última versión de OpenSSH, que no estoy seguro de que Debian haya implementado todavía.
Rilindo
Ahh, perdón por eso. Se actualizó la respuesta con respecto al requisito de versión.
andol
1

Puedes probar esto:

root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file

Esto copiará el archivo en el directorio / tmp en la tercera computadora y, si tiene éxito, volverá a copiar ese archivo en la computadora secundaria y luego se limpiará. Como está utilizando el operador &&, cada comando solo se ejecutará si el comando anterior es exitoso.

Rilindo
fuente
No sabía sobre el operador &&. Mejor que usar;
JorgeO
Esta es la misma técnica que la pregunta original utilizada en el primer ejemplo, que se intentaba evitar (copiar de la computadora A a la máquina local, luego copiar el archivo local a la computadora B).
Jason C