Questa domanda trova essenzialmente risposta altrove, incluso qui per scp e qui per rsync. Poiché quest'ultima include la mia risposta, ma nessuna risposta è stata accettata, la ripeterò qui.
Come hai notato, puoi usare rsync
è -e | --rsh
opzione, ma sarà un po' più complicato:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Oppure, se la tua versione di ssh
è abbastanza nuovo (OpenSSH>=v7.3), puoi usare -J
(ProxyJump
) opzione
rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/
Nota che sto usando -A
(inoltro agente) ma dovrebbe funzionare anche con l'autenticazione della password se non si utilizzano le chiavi e, ovviamente, è possibile sostituire proxy
con B
e dest
con C
nel tuo esempio.
Se per caso non hai un ssh
abbastanza nuovo version (>=5.3, IIRC), puoi usare netcat
invece di -W
opzione a ssh
:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Infine, come già notato nei commenti, puoi inserire ProxyCommand
nel tuo $HOME/.ssh/config
file in modo da non dover disporre di una riga di comando così complicata. Nello specifico, aggiungi qualcosa del genere:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Oppure, usando ProxyJump
per OpenSSH>=v 7.3:
Host C
ProxyJump PROXYHOST
Quindi dovresti essere in grado di fare solo:
rsync -azv foo/ C:./foo/