archivos scp a través de un host intermedio

Pregunta:

Tengo acceso a 3 máquinas, A, B y C. Las únicas conexiones posibles (ssh) son:

A -> B
B <-> C

Necesito obtener archivos de A a C, para poder realizar un scp de los archivos de A a B, y luego scp de B a C. Sin embargo, B no tiene mucho espacio en el disco, así que esta no es una opción. ¿Hay alguna manera de transferir archivos scp de A a C a través de B? Tenga en cuenta que no tengo acceso de root en ninguna de las máquinas, así que no creo que pueda configurar túneles persistentes, ¡pero corríjame si me equivoco!

Respuesta:

ProxyJump

Nuevo en OpenSSH 7.3:

A$ scp -oProxyJump=B thefile C:destination

(Detrás de escena, esto solo usa ProxyCommand y ssh -W ).

ProxyCommand

Actualizado para incluir -W de otras respuestas:

A$ scp -oProxyCommand="ssh -W %h:%p B" thefile C:destination

Si A tiene un cliente SSH muy antiguo instalado (sin soporte -W ), o si B está configurado para no permitir el reenvío de TCP (pero aún permite comandos de shell), use alternativas:

A$ scp -oProxyCommand="ssh B socat stdio tcp:%h:%p" thefile C:destination
A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination

Tubería

A$ tar cf - thefile anotherfile | ssh B "ssh C \"cd destination && tar xvf -\""
A$ (echo thefile; echo anotherfile) | cpio -o | ssh B "ssh C \"cd destination && cpio -i\""

Para un solo archivo:

A$ ssh B "ssh C \"cd destination && cat > thefile\"" < thefile

"Túnel" a través de B

A$ ssh -f -N -L 4567:C:22 B
(continues running in background)

A$ scp -P 4567 thefile localhost:destinationPath

Cuando haya terminado, no olvide eliminar el proceso ssh iniciado anteriormente (que ha pasado a segundo plano debido a -f -N ).

  • -f Solicita a ssh que pase a segundo plano justo antes de la ejecución del comando. Esto es útil si ssh va a solicitar contraseñas o frases de contraseña, pero el usuario lo quiere en segundo plano. Esto implica -n.
  • -N No ejecute un comando remoto. Esto es útil solo para reenviar puertos.

Invertir el "túnel" a través de B hacia A

Sin embargo, no siempre funciona:

A$ ssh -f -N -R 4567:localhost:22 B
(now you can reach A from B, by using localhost:4567)

B$ scp -P 4567 localhost:thefile C:destination
  • -R Especifica que las conexiones al puerto TCP dado o al socket Unix en el host remoto (servidor) se reenviarán al host y puerto dado, o socket Unix, en el lado local.

Leave a Comment

Your email address will not be published.

Scroll to Top

istanbul avukat

-

web tasarım