scp giữa hai máy chủ không cùng mạng


13

Có hai máy chủ mà tôi có thể truy cập với 2 kết nối VPN khác nhau. Tôi đã quản lý để cả hai VPN hoạt động cùng một lúc trên máy của mình (một chút quy tắc định tuyến).

Tôi muốn làm một scp <remote1>:some/file <remote2>:destination/foldertừ thiết bị đầu cuối máy tính xách tay của tôi. Nhưng khi tôi thử điều này, scplệnh được gọi trên remote1 không thể tìm thấy remote2 vì chúng không nằm trong cùng một mạng. Có thể buộc scplệnh đi qua máy tính xách tay của tôi như một bộ định tuyến không?

Nếu tôi thử với Nautilus (kết nối với máy chủ, cả hai máy chủ, sau đó sao chép-dán) thì nó hoạt động, nhưng tôi muốn làm điều đó từ một thiết bị đầu cuối.


Đó là máy của bạn liên lạc với cả hai, remote1remote2 . Bạn có chắc là lỗi là remote1 không thể truy cập remote2 không?
Jan

Có, lỗi là ssh: Không thể giải quyết tên máy chủ <remote2>: Tên hoặc dịch vụ không xác định bị mất kết nối
Danduk82

Và nếu tôi cố gắng sử dụng địa chỉ IP trực tiếp cho <remote2> thì kết nối sẽ bị lỗi sau một thời gian (hangout).
Danduk82

Sau đó, tôi đoán đó là máy của bạn không thể kết nối với remote2 . Có lẽ kết nối VPN hết thời gian hoặc bị lỗi ...
Ngày

Không có nó hoạt động, ngay cả DNS đang hoạt động. Tôi thực sự có cảm giác rằng lệnh scp cố gắng thực hiện kết nối giữa remote1remote2 trực tiếp trên remote1 .
Danduk82

Câu trả lời:


34

Các phiên bản mới hơn của scp có tùy chọn -3

-3

Copies between two remote hosts are transferred through the local host. Without this option the data is copied directly between the two remote hosts

tuyệt quá! Chính xác những gì tôi cần. Cảm ơn rất nhiều
Danduk82

1
Tìm kiếm tuyệt vời, tôi đã không biết điều đó!
Jan

9

Nếu bạn cần linh hoạt hơn scp -3, đồng bằng sshvà đường ống là niềm vui.

Điều này tương đương với việc chuyển hướng luồng qua máy cục bộ:

ssh sourceRemote 'cat /path/to/sourceFile' \
| ssh destinationRemote 'cat > /path/to/destinationFile'

Sau đó, bạn có thể thêm nhiều chuyển hướng luồng tại bất kỳ điểm nào, ví dụ: xâu chuỗi một số máy trung gian hoặc lưu một bản sao cục bộ của tệp được chuyển khi nó được định tuyến.


2
Bạn sẽ nhận được một thanh tiến trình tốt đẹp nếu máy nguồn đã pvđược cài đặt và bạn thay thế thanh đầu tiên catbằng nó.
liori

6

Mở rộng câu trả lời của @ Anko, bạn có thể sử dụng tarcho nhiều tệp:

ssh -q user@sourcehost 'cd /source/path; tar -czf - files...' | \
ssh -q user@desthost 'cd /dest/path; tar -xzf -'

Nén là hoàn toàn tùy chọn - dữ liệu của bạn có thể không nén được hoặc đủ lớn để đảm bảo chi phí hoạt động. Nếu phiên bản của tarbạn không hỗ trợ -zchuyển đổi, hãy chuyển qua gzip -cgzip -dctương ứng.

PS: Coi chừng các phiên bản tarkhông loại bỏ dấu gạch chéo hàng đầu khi trích xuất (nghĩa là ghi vào tên đường dẫn tuyệt đối nếu được cung cấp).

Chỉnh sửa: -e nonekhông cần thiết với đường ống, vì thiết bị đầu cuối giả không được phân bổ.


1
sshcó một -Ccờ để cho phép nén luồng. Theo mantrang này, nó sử dụng thuật toán tương tự như gzipmặc dù. Trang hướng dẫn cũng giúp làm rõ khi nào nên sử dụng nó: "Nén là mong muốn trên các dòng modem và các kết nối chậm khác, nhưng sẽ chỉ làm chậm mọi thứ trên các mạng nhanh."
Anko

4
@Anko, vấn đề với việc sử dụng -Cở đây là máy cục bộ sẽ phải giải nén và giải nén dữ liệu. Nói tarđể thực hiện nén có nghĩa là dữ liệu nén được truyền thẳng qua đường ống mà không cần xử lý.
cjm
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.