Tập tin Rsync qua máy chủ trung gian


22

Tôi hiện đang rời khỏi mạng LAN của mình và tôi cần sao lưu máy tính xách tay của mình. Tôi có một bản sao gần đây của máy tính xách tay của mình trên máy chủ của mình và tôi thường sao lưu máy tính xách tay lên bằng rsync. Bây giờ tôi muốn làm điều đó, nhưng ngoài mạng LAN của tôi.

Nói tóm lại, tôi muốn gửi dữ liệu từ A đến C qua B, trong đó A là máy tính xách tay của tôi, B bộ định tuyến của tôi và C máy chủ của tôi.

Tôi đã tìm thấy lệnh này : A$ scp -oProxyCommand="ssh B nc %h %p" thefile C:destination, hoạt động tốt khi truyền tệp qua scp - nhưng vì tôi đã có hầu hết dữ liệu trên máy chủ của mình, tôi muốn sử dụng rsync để chỉ đồng bộ hóa delta.

Tôi đã thử: A$ rsync file -e 'ssh B ssh' Cvà nó hoạt động theo như tôi được nhắc cung cấp mật khẩu cho người dùng: C. Tuy nhiên, khi tôi nhập mật khẩu thì không có gì xảy ra. Bộ định tuyến đang chạy Tomato v1.28 và tôi không thể thiết lập nó để sử dụng tệp cấu hình ssh để cho phép nó đăng nhập vào mật khẩu C w / oa.

Bất kỳ ý tưởng về làm thế nào để làm cho công việc này?


2
sử dụng tương tự ProxyCommandtrong tập tin cấu hình. Rsync nên chọn đó.
Jakuje

Câu trả lời:


30

Câu hỏi này về cơ bản được trả lời ở nơi khác, bao gồm ở đây cho scpở đây cho rsync . Vì câu trả lời bao gồm câu trả lời của tôi, nhưng không có câu trả lời nào được chấp nhận, tôi sẽ lặp lại ở đây.

Như bạn đã lưu ý, bạn có thể sử dụng tùy chọn rsynccủa mình -e | --rsh, nhưng nó sẽ phức tạp hơn một chút:

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

Hoặc, nếu phiên bản của bạn sshđủ mới (OpenSSH> = v7.3), bạn có thể sử dụng tùy chọn -J( ProxyJump)

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

Lưu ý rằng tôi đang sử dụng -A(đại lý giao nhận) nhưng nó cũng nên làm việc với xác thực mật khẩu nếu bạn không sử dụng các phím, và, tất nhiên, bạn có thể thay thế proxyvới Bdestvới Ctrong ví dụ của bạn.

Nếu tình cờ bạn không có sshphiên bản đủ mới (> = 5.3, IIRC), bạn có thể sử dụng netcatthay vì -Wtùy chọn để ssh:

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

Cuối cùng, như đã lưu ý trong các bình luận, bạn có thể đặt tệp ProxyCommandvào $HOME/.ssh/configtệp của mình để không phải có một dòng lệnh phức tạp như vậy. Cụ thể, thêm một cái gì đó như thế này:

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

Hoặc, sử dụng ProxyJumpcho OpenSSH> = v 7.3:

Host C
  ProxyJump PROXYHOST

Sau đó, bạn sẽ có thể chỉ cần làm:

rsync -azv foo/ C:./foo/
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.