Cette question trouve essentiellement une réponse ailleurs, y compris ici pour scp et ici pour rsync. Étant donné que ce dernier inclut ma réponse, mais qu'aucune réponse n'a été acceptée, je vais le répéter ici.
Comme vous l'avez noté, vous pouvez utiliser rsync
est -e | --rsh
option, mais ça va être un peu plus compliqué :
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Ou, si votre version de ssh
est assez nouveau (OpenSSH>=v7.3), vous pouvez utiliser le -J
(ProxyJump
) possibilité
rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/
Notez que j'utilise -A
(transfert d'agent) mais cela devrait également fonctionner avec l'authentification par mot de passe si vous n'utilisez pas de clés, et, bien sûr, vous pouvez remplacer proxy
avec B
et dest
avec C
dans votre exemple.
Si par hasard vous n'avez pas un ssh
assez récent version (>=5.3, IIRC), vous pouvez utiliser netcat
au lieu de -W
option à ssh
:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Enfin, comme indiqué dans les commentaires déjà, vous pouvez mettre le ProxyCommand
dans votre $HOME/.ssh/config
fichier afin que vous n'ayez pas à avoir une ligne de commande aussi compliquée. Plus précisément, ajoutez quelque chose comme ceci :
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Ou, en utilisant ProxyJump
pour OpenSSH>=v 7.3 :
Host C
ProxyJump PROXYHOST
Ensuite, vous devriez pouvoir faire :
rsync -azv foo/ C:./foo/