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/