File rsync melalui host perantara

22

Saat ini saya jauh dari LAN saya dan saya perlu melakukan backup laptop saya. Saya memiliki salinan laptop saya yang agak baru di server saya dan saya biasanya mendukung laptop menggunakan rsync. Sekarang saya ingin melakukan itu, tetapi di luar LAN saya.

Singkatnya saya ingin mengirim data dari A ke C melalui B, di mana A adalah laptop saya, B router saya dan C server saya.

Saya menemukan perintah ini:, A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destinationyang berfungsi dengan baik untuk mentransfer file melalui scp - tetapi karena saya sudah memiliki sebagian besar data di server saya, saya ingin menggunakan rsync untuk hanya menyinkronkan delta.

Saya telah mencoba:, A$ rsync file -e 'ssh B ssh' Cdan itu berfungsi sejauh saya diminta untuk memberikan kata sandi bagi pengguna: C. Namun, ketika saya memasukkan kata sandi, tidak ada yang terjadi. Router menjalankan Tomat v1.28 dan saya tidak dapat mengaturnya untuk menggunakan file konfigurasi ssh untuk memungkinkannya untuk login ke kata sandi C w / oa.

Ada ide tentang bagaimana membuat ini bekerja?

GLDER
sumber
2
gunakan hal yang sama ProxyCommanddalam file konfigurasi. Rsync harus mengambilnya.
Jakuje

Jawaban:

30

Pertanyaan ini pada dasarnya dijawab di tempat lain, termasuk di sini untuk scp dan di sini untuk rsync . Karena yang terakhir mencakup jawaban saya, tetapi tidak ada jawaban yang diterima, saya akan mengulanginya di sini.

Ketika Anda dicatat, Anda dapat menggunakan rsync's -e | --rshpilihan, tapi itu akan menjadi sedikit lebih rumit:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST -W %h:%p"' foo/ dest:./foo/

Atau, jika versi Anda sshcukup baru (OpenSSH> = v7.3), Anda dapat menggunakan opsi -J( ProxyJump)

rsync -azv -e 'ssh -A -J USER@PROXYHOST:PORT' foo/ dest:./foo/

Perhatikan bahwa saya menggunakan -A(penerusan agen) tetapi juga harus berfungsi dengan otentikasi kata sandi jika Anda tidak menggunakan kunci, dan, tentu saja, Anda dapat mengganti proxydengan Bdan destdengan Cdalam contoh Anda.

Jika kebetulan Anda tidak memiliki sshversi yang cukup baru (> = 5.3, IIRC), Anda dapat menggunakan netcatsebagai ganti -Wopsi untuk ssh:

rsync -azv -e 'ssh -o "ProxyCommand ssh -A PROXYHOST nc %h %p"' foo/ dest:./foo/

Akhirnya, seperti yang disebutkan dalam komentar, Anda dapat memasukkannya ProxyCommandke dalam $HOME/.ssh/configfile Anda sehingga Anda tidak harus memiliki baris perintah yang rumit. Secara khusus, tambahkan sesuatu seperti ini:

Host C
  ProxyCommand ssh -A PROXYHOST -p 22 -W %h:%p

Atau, gunakan ProxyJumpuntuk OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Maka Anda harus bisa melakukan:

rsync -azv foo/ C:./foo/
crimson-egret
sumber