Necesito transferir un archivo entre dos computadoras que no están conectadas a la misma red. Conseguí 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 finaliza la transferencia con la siguiente frase:
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 la primera computadora no puede ver la segunda computadora. ¿Es posible darle a SCP un parámetro que se ocupe del 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.
Respuesta1
Debería poder utilizar 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 puedes ejecutar una cantidad ilimitada de comandos SCP en este túnel (aún escribiendo en tu 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 lo es, deberá establecer un túnel entre el local y la puerta de enlace, y otro túnel entre la puerta de enlace y la remota, vinculando los dos mediante un número de puerto común.
Respuesta2
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.
Respuesta3
Puedes probar esto:
root@firstcomputer:./file /tmp && scp /tmp/file root@secondcomputer:./ && rm /tmp/file
Esto copiará el archivo en el directorio /tmp de la tercera computadora y, si tiene éxito, volverá a copiar ese archivo en la computadora secundaria y luego se limpiará solo. Dado que está utilizando el operador &&, cada comando solo se ejecutará si el comando anterior tiene éxito.