Esta questão é essencialmente respondida em outro lugar, incluindo aqui para scp e aqui para o rsync . Como o último inclui minha resposta, mas nenhuma resposta foi aceita, vou repeti-la aqui.
Como você observou, você pode usar a opção rsync
-e | --rsh
, mas será um pouco mais complicado:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Ou, se a sua versão de ssh
for nova o suficiente (OpenSSH > = v7.3), você poderá usar a opção -J
( ProxyJump
)
rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/
Observe que estou usando -A
(encaminhamento de agente), mas também deve funcionar com autenticação de senha se você não usar chaves, e, é claro, você pode substituir proxy
por B
e dest
com C
no seu exemplo.
Se por acaso você não tiver uma nova versão ssh
(> = 5.3, IIRC), use a opção netcat
em vez de -W
para ssh
:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Por fim, conforme observado nos comentários, você pode colocar o ProxyCommand
em seu arquivo $HOME/.ssh/config
para não ter uma linha de comando tão complicada. Especificamente, adicione algo assim:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Ou usando ProxyJump
para OpenSSH > = v 7.3:
Host C
ProxyJump PROXYHOST
Então você deve ser capaz de fazer apenas:
rsync -azv foo/ C:./foo/