Diese Frage wird im Wesentlichen an anderer Stelle beantwortet, einschließlich hier für scp und hier für rsync. Da letzteres meine Antwort enthält, aber keine Antwort akzeptiert wurde, wiederhole ich es hier.
Wie Sie bemerkt haben, können Sie rsync verwenden ist -e | --rsh Option, aber es wird etwas komplizierter:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Oder, wenn Ihre Version von ssh neu genug ist (OpenSSH>=v7.3), können Sie den -J verwenden (ProxyJump )-Option
rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/
Beachten Sie, dass ich -A verwende (Agentenweiterleitung), aber es sollte auch mit Passwortauthentifizierung funktionieren, wenn Sie keine Schlüssel verwenden, und natürlich können Sie proxy ersetzen mit B und dest mit C in deinem Beispiel.
Falls Sie zufällig keinen ausreichend neuen ssh haben Version (>=5.3, IIRC), können Sie netcat verwenden statt -W Option zu ssh :
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Schließlich können Sie, wie bereits in den Kommentaren erwähnt, den ProxyCommand einfügen in Ihren $HOME/.ssh/config Datei, damit Sie nicht so eine komplizierte Befehlszeile haben müssen. Fügen Sie insbesondere Folgendes hinzu:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Oder verwenden Sie ProxyJump für OpenSSH>=v 7.3:
Host C
ProxyJump PROXYHOST
Dann sollten Sie in der Lage sein, einfach Folgendes zu tun:
rsync -azv foo/ C:./foo/