Nhận tệp từ máy chủ cách đó hai bước [đóng]


14

Chúng tôi có tình huống sau:

  1. Máy của tôi
  2. Một máy cổng
  3. Máy đích

Tôi không có quyền root trên cả # 2 và # 3. Tôi cũng không thể thực sự lưu trữ thông tin (không quá 200 MiB) trên máy số 2 (vì nó được coi là một cổng vào phần còn lại của mạng, không hơn thế nữa). Trên máy số 3 có một thư mục, kích thước khoảng 3 GiB mà tôi muốn sao chép sang cục bộ. Tôi không thể SSH từ # 1 đến # 3, nhưng tôi có thể SSH đến # 2 và sau đó đến # 3. Cũng không thể thiết lập một cặp khóa riêng tư công khai giữa # 2 và # 3, nhưng có một cặp khóa được cài đặt giữa # 1 và # 2.

Thông thường tôi sử dụng kết hợp SSH và tar để thực hiện điều này:

ssh name@host "tar cf - folder" > folder.tar

Nhưng trong trường hợp này sẽ yêu cầu một số loại lồng nhau, và tôi dường như không thể hoàn thành việc này.

Vì vậy, điều gì sẽ là một cách tốt để có được dữ liệu từ # 3 đến # 1?

Câu trả lời:


27

Bạn có thể tạo một đường hầm SSH thông qua machine2 sau đó trong một phiên khác kết nối với đường hầm.

Ví dụ: mở hai phiên CLI trên máy1. Trong phiên đầu tiên chạy như sau:

MACHINE1$ ssh -L 2022:MACHINE3:22 <user>@MACHINE2

Trong phiên thứ hai chạy như sau:

MACHINE1 $ ssh -p 2022 <user>@localhost

Điều xảy ra với lệnh đầu tiên là một cổng cục bộ (2022 trên máy1) đang được chuyển sang cổng 22 trên máy3 bằng kết nối SSH của bạn với máy2.

Với lệnh thứ hai, bạn đang kết nối với cổng cục bộ mới mở (2022) và giống như bạn đang kết nối trực tiếp với máy3.

Bây giờ nếu bạn muốn sử dụng quy trình chuyển tập tin điển hình của mình, bạn có thể làm như sau:

ssh -p 2022 <user>@localhost "tar cf - /path/to/remote/directory/" > filename.tar

Ngoài ra, bạn có thể tự làm quen với rsync và thay vào đó:

rsync -aHSv --progress -e 'ssh -p 2022' <user>@localhost:/path/to/remote/directory/ /path/to/local/directory/

Giả sử mục tiêu cuối cùng không phải là để có được một tarball.


2
Sử dụng ProxyCommandssh -Whai sshlệnh có thể được kết hợp thành một dòng lệnh duy nhất. Nếu bạn có một phiên bản gần đây của ứng dụng khách OpenSSH, có một đối số sẽ cho phép bạn thực hiện tất cả chỉ với một sshlệnh.
kasperd

+1 cho rsync;)
NieDzejkob

Tôi sử dụng tar vì chuyển nhiều tệp mất nhiều thời gian hơn sau đó chuyển một tệp lớn. Liệu rsync có giải quyết được điều này?
Cheiron

Khi thực hiện chuyển từ xa, rsync sẽ kiểm tra dữ liệu trong quá trình (ở đầu nhận, trước khi ghi vào đĩa), do đó sẽ mất nhiều thời gian hơn để truyền tệp. Tuy nhiên, đó là thời gian chi tiêu tốt.
Gene

5

Bạn cũng có thể sử dụng khả năng phiên Master của các phiên bản SSH mới hơn. Nó được mô tả ở đây:

https://en.wikibooks.org/wiki/OpenSSH/Cookbook/Multiplexing

Có lẽ tất cả những gì bạn cần là chỉnh sửa / tạo .ssh / config của bạn. Thêm vào đó các định nghĩa kiểm soát các phiên Master:

ControlMaster auto
ControlPath ~/.ssh/cm_socket/%r@%h:%p
ControlPersist 4h
ServerAliveInterval 30

Sau đó, bạn có thể chỉ định định nghĩa máy chủ hop đầu tiên của mình như:

Host first_hop
Hostname <your first host FQDN or IP>
User <your user>

Và hop thứ hai sẽ sử dụng máy chủ hop đầu tiên của bạn làm proxy:

Host second_hop
Hostname <your second host FQDN or IP>
User <your user>
ProxyCommand ssh -W %h:%p first_hop

Đừng quên tạo thư mục ~ / .ssh / cm_socket và quyền cấu hình phải là 644.

Sau đó, bạn sẽ có thể SSH hoặc SCP trực tiếp đến / từ máy chủ thứ hai của bạn. Có thể có nhiều máy chủ bị xích như thế này.


3
Từ việc đọc liên kết của bạn, tôi không nghĩ Ghép kênh / ControlMasterlà cần thiết để ủy quyền. Trang có liên quan hơn trong wikibook này là trang này: en.wikibooks.org/wiki/OpenSSH/Cookbook/Proxies_and_Jump_hosts
IMSoP

Vâng tôi đồng ý. Có nhiều cách. Tuy nhiên tôi coi phiên Master là thanh lịch nhất. Đó chỉ là về sở thích cá nhân ;-)
Jaroslav Kucera

Một hoặc một trong số chúng tôi đã hiểu lầm điều gì đó. Theo như tôi có thể thấy, "kết nối chính" là về việc sử dụng hiệu quả tài nguyên mạng và không liên quan gì đến câu hỏi. Đó không phải là một cách làm khác, nó chỉ không liên quan đến nhiệm vụ trong tay.
IMSoP
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.