Pertanyaan ini pada dasarnya dijawab di tempat lain, termasuk di sini untuk scp dan di sini untuk rsync. Karena yang terakhir menyertakan jawaban saya, tetapi tidak ada jawaban yang diterima, saya akan mengulanginya di sini.
Seperti yang Anda catat, Anda dapat menggunakan rsync
-e | --rsh
opsi, tetapi ini akan menjadi sedikit lebih rumit:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/
Atau, jika versi ssh
Anda cukup baru (OpenSSH>=v7.3), Anda dapat menggunakan -J
(ProxyJump
) opsi
rsync -azv -e 'ssh -A -J [email protected]:PORT' foo/ dest:./foo/
Perhatikan bahwa saya menggunakan -A
(penerusan agen) tetapi juga harus bekerja dengan otentikasi kata sandi jika Anda tidak menggunakan kunci, dan, tentu saja, Anda dapat mengganti proxy
dengan B
dan dest
dengan C
dalam contoh Anda.
Jika kebetulan Anda tidak memiliki ssh
yang cukup baru versi (>=5.3, IIRC), Anda dapat menggunakan netcat
bukannya -W
opsi untuk ssh
:
rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/
Akhirnya, seperti yang sudah disebutkan dalam komentar, Anda dapat meletakkan ProxyCommand
ke dalam $HOME/.ssh/config
Anda file sehingga Anda tidak perlu memiliki baris perintah yang rumit. Secara khusus, tambahkan sesuatu seperti ini:
Host C
ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p
Atau, gunakan ProxyJump
untuk OpenSSH>=v 7.3:
Host C
ProxyJump PROXYHOST
Maka Anda seharusnya dapat melakukan:
rsync -azv foo/ C:./foo/