Esta pregunta se responde esencialmente en otro lugar, incluso aquí para scp y aquí para rsync. Dado que este último incluye mi respuesta, pero no se aceptó ninguna respuesta, lo repetiré aquí.
Como notó, puede usar rsync
de -e | --rsh
opción, pero va a 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 ssh
es lo suficientemente nuevo (OpenSSH>=v7.3), puede usar el -J
(ProxyJump
) opción
rsync -azv -e 'ssh -A -J [email protected]: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 proxy
con B
y dest
con C
en tu ejemplo.
Si por casualidad no tienes un ssh
lo suficientemente nuevo versión (>=5.3, IIRC), puede usar netcat
en lugar de -W
opción a 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 poner el ProxyCommand
en tu $HOME/.ssh/config
archivo 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 ProxyJump
para OpenSSH>=versión 7.3:
Host C
ProxyJump PROXYHOST
Entonces deberías poder hacer:
rsync -azv foo/ C:./foo/