Tato otázka je v podstatě zodpovězena jinde, včetně zde pro scp a zde pro rsync. Vzhledem k tomu, že poslední obsahuje mou odpověď, ale žádná odpověď nebyla přijata, zopakuji to zde.
Jak jste poznamenali, můžete použít rsync
's -e | --rsh
možnost, ale bude to trochu složitější:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Nebo, pokud je vaše verze ssh
je dostatečně nový (OpenSSH>=v7.3), můžete použít -J
(ProxyJump
) možnost
rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/
Všimněte si, že používám -A
(přesměrování agenta), ale mělo by to fungovat i s ověřováním heslem, pokud nepoužíváte klíče, a samozřejmě můžete nahradit proxy
s B
a dest
s C
ve vašem příkladu.
Pokud náhodou nemáte dostatečně nový ssh
verze (>=5.3, IIRC), můžete použít netcat
místo -W
možnost na ssh
:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Nakonec, jak již bylo uvedeno v komentářích, můžete zadat ProxyCommand
do vašeho $HOME/.ssh/config
soubor, takže nemusíte mít tak složitý příkazový řádek. Konkrétně přidejte něco takového:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Nebo pomocí ProxyJump
pro OpenSSH>=v 7.3:
Host C
ProxyJump PROXYHOST
Pak byste měli být schopni udělat:
rsync -azv foo/ C:./foo/