Archivos Rsync a través de un host intermedio

22

Actualmente estoy lejos de mi LAN y necesito hacer una copia de seguridad de mi computadora portátil. Tengo una copia algo reciente de mi computadora portátil en mi servidor y generalmente hago una copia de seguridad de la computadora portátil usando rsync. Ahora deseo hacer eso, pero fuera de mi LAN.

En resumen, quiero enviar datos de A a C a través de B, donde A es mi computadora portátil, B mi enrutador y C mi servidor.

Encontré este comando: A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destinationque funciona bien para transferir archivos a través de scp, pero como ya tengo la mayoría de los datos en mi servidor, deseo usar rsync para sincronizar solo el delta.

He intentado:, A$ rsync file -e 'ssh B ssh' Cy eso funciona hasta donde se me solicita que proporcione la contraseña para el usuario: C. Sin embargo, cuando ingreso la contraseña no sucede nada. El enrutador ejecuta Tomato v1.28 y no puedo configurarlo para utilizar un archivo de configuración ssh que le permita iniciar sesión en C con una contraseña.

¿Alguna idea de cómo hacer que esto funcione?

GLader
fuente
2
use lo mismo ProxyCommanden el archivo de configuración. Rsync debería recoger eso.
Jakuje

Respuestas:

30

Esta pregunta se responde esencialmente en otro lugar, incluido aquí para scp y aquí para rsync . Como esta última incluye mi respuesta, pero no se aceptó ninguna respuesta, la repetiré aquí.

Como notó, puede usar rsyncla -e | --rshopción, pero será un poco más complicado:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

O, si su versión de sshes lo suficientemente nueva (OpenSSH> = v7.3), puede usar la opción -J( ProxyJump)

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

Tenga en cuenta que estoy usando -A(reenvío de agente), pero también debería funcionar con autenticación de contraseña si no usa claves y, por supuesto, puede reemplazar proxycon By destcon Cen su ejemplo.

Si por casualidad no tiene una sshversión lo suficientemente nueva (> = 5.3, IIRC), puede usar en netcatlugar de la -Wopción para ssh:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

Finalmente, como ya se señaló en los comentarios, puede colocarlo ProxyCommanden su $HOME/.ssh/configarchivo para que no tenga que tener una línea de comando tan complicada. Específicamente, agregue algo como esto:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

O, usando ProxyJumppara OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Entonces deberías poder hacer:

rsync -azv foo/ C:./foo/
garceta carmesí
fuente