Sao chép dữ liệu qua đường hầm SSH qua nhiều bước nhảy


14

Chúng tôi có hai môi trường chính trong câu hỏi:

Phát triển và QA

Mỗi môi trường có hai máy chủ:

  • Nhảy hộp
  • Máy chủ ứng dụng

Để kết nối với máy chủ ứng dụng, trước tiên bạn phải kết nối với hộp nhảy, sau đó SSH đến máy chủ Ứng dụng.

Có một vài quy tắc lịch sự của tường lửa:

  • Bạn PHẢI kết nối với máy chủ ứng dụng thông qua hộp nhảy
  • Máy chủ ứng dụng không thể kết nối với các hộp nhảy
  • Các hộp nhảy nằm trên cùng một mạng con và CÓ THỂ nói chuyện với nhau.

Vấn đề của chúng ta

Chúng tôi có rất nhiều nội dung (670 GB) trên DEVELOPMENT APPLICATION SERVERvà chúng tôi cần đưa nội dung này vào QA APPLICATION SERVER.

Sao chép dữ liệu này vào các hộp nhảy không phải là một tùy chọn vì chúng thiếu dung lượng cần thiết.

Tôi đã thực hiện một số nghiên cứu và biết rằng chúng tôi có khả năng thực hiện một loạt các đường hầm thông qua các máy chủ này để chúng tôi có thể truyền dữ liệu trực tiếp từ máy chủ ứng dụng này sang máy chủ khác thông qua các đường hầm. Tuy nhiên, vấn đề chúng ta không thể kết nối với hộp nhảy từ máy chủ ứng dụng.

Chúng ta có lựa chọn nào không? Đây là một tình huống tuyệt vọng, và thời gian là điều cốt yếu. Chúng tôi không có thời gian để tải xuống dữ liệu và tải lên lại. Sao chép trên mạng trên các máy chủ sẽ nhanh chóng, vì đó là kết nối gigabit.


2
Sau khi kết nối được thiết lập, bạn có thể sao chép một trong hai cách: $ devel_host $ tar -cf - | ssh -t jumbox 'ssh app_serv "tar -xf -"' hoặc cách khác xung quanh tar.
Alex_www

vì vậy chúng tôi có thể kết nối từ hộp nhảy dev đến máy chủ ứng dụng dev, nhưng không phải theo cách khác. Nếu chúng ta có kết nối đó được thiết lập, chúng ta có thể sao chép một trong hai cách? cách tốt nhất để di chuyển nội dung này sang máy chủ ứng dụng khác mà không lưu trước vào hộp nhảy là gì?
Barry Chapman

Chính xác, "đường ống" "tar" là một giải pháp đơn giản nhất.
Alex_www

Câu trả lời:


15

Cho đến nay, cách dễ nhất là chỉ sao chép nó qua scp. Thêm vào đó, cú pháp này thực sự hoạt động không giống như một số gợi ý khác.

Bạn không thể đánh bại cú pháp này cho dễ. Nó cho phép bạn sao chép đệ quy, rsync hoặc những gì bạn muốn mà không gặp rắc rối khi xem xét các đường ống có khả năng phức tạp. Cú pháp này rõ ràng bằng trực giác, sẽ dễ dàng được hỗ trợ hơn bởi các Quản trị viên Sys theo dõi bạn và không sử dụng con mèo vô dụng .

scp -3 devappserver:/path/to/copy/from qaappserver:/path/to/copy/to

Từ trang scp man : -3Bản sao giữa hai máy chủ từ xa được chuyển qua máy chủ cục bộ. Không có tùy chọn này, dữ liệu được sao chép trực tiếp giữa hai máy chủ từ xa. Lưu ý rằng tùy chọn này vô hiệu hóa đồng hồ đo tiến độ.

Trong ví dụ dưới đây

  • Máy trạm của bạn được đặt tên là MacBook-Pro.
  • Dev Jump Box được đặt tên là devjumpserver
  • Máy chủ ứng dụng Dev được đặt tên là devappluggesterver
    • Có trên vùng DNS LAN có tên .local
  • QA Jump Box được đặt tên là qajumpserver
  • Máy chủ ứng dụng QA được đặt tên là qaappluggesterver
    • Là trên vùng LAN DNZ có tên .local
  • Chúng tôi sẽ thực hiện một bản sao thử nghiệm của tệp 670GB / etc / hosts ;-)
  • Giả định được thực hiện là bạn đã cấu hình xác thực khóa công khai SSH.



Đây là tệp ~ / .ssh / config thiết lập quyền truy cập trực tiếp từ máy trạm của bạn đến các máy chủ ứng dụng thông qua bước nhảy thích hợp (còn gọi là máy chủ pháo đài).

MacBook-Pro: ~ barrychapman $ cat ~ / .ssh / config
Tổ chức *
  ServerAliveInterval 60
Máy chủ lưu trữ
  HostName devappluggesterver.local
  ProxyCommand ssh -i ~ / .ssh / id_rsa barrychapman@devjumpserver.example.com -W% ​​h:% p
  Người dùng barrychapman
Máy chủ qaappluggesterver
  Tên máy chủ qaappluggesterver.local
  ProxyCommand ssh -i ~ / .ssh / id_rsa barrychapman@qajumpserver.example.com -W% ​​h:% p
  Người dùng barrychapman

MacBook-Pro: ~ barrychapman $



Kiểm tra sự hiện diện của tệp trên máy chủ mục tiêu, nó sẽ không ở đó.

MacBook-Pro: ~ barrychapman $ ssh qaappluggesterver ls / tmp / hosts
ls: không thể truy cập / tmp / hosts: Không có tệp hoặc thư mục như vậy
Bị giết bởi tín hiệu 1.
MacBook-Pro: ~ barrychapman $



Bây giờ, hãy sao chép một tệp từ máy chủ Dev Application sang Ứng dụng QA thông qua máy trạm của bạn.

MacBook-Pro: ~ barrychapman $ scp -3 devappluggesterver: / etc / hosts qaappluggesterver: / tmp /
Bị giết bởi tín hiệu 1.
Bị giết bởi tín hiệu 1.
MacBook-Pro: ~ barrychapman $



Bây giờ, hãy kiểm tra sự hiện diện của tệp được sao chép trên Máy chủ ứng dụng QA. Nó sẽ ở đó lần này

MacBook-Pro: ~ barrychapman $ ssh qaappluggesterver ls / tmp / hosts
/ tmp / máy chủ
Bị giết bởi tín hiệu 1.
MacBook-Pro: ~ barrychapman $ 

Ghi chú

Khi đóng kết nối ProxyCommand, bạn sẽ thấy thông báo cảnh báo "Bị giết bởi tín hiệu 1". Đây là SSH phá hỏng kết nối ProxyCommand và không có gì đáng báo động. Bạn có thể thoát khỏi nó bằng cách thêm LogLevel Quietvào khổ thơ cấu hình máy chủ pháo đài.


Chúc mừng, điều này đã giải quyết vấn đề của chúng tôi. Giáng sinh vui vẻ!
Barry Chapman

Bạn có ý nghĩa gì bởi "bastion host config stanza" ?? @BraveNewCurrency?
Andrew Wolfe

Tôi coi mỗi dòng "Máy chủ" và các cấu hình bên dưới là một khổ thơ (như trong thơ.) Nếu bạn thêm "LogLevel Im lặng" trong dòng "Máy chủ" của pháo đài, nó sẽ chỉ áp dụng cho máy chủ đó.
BraveNewCurrency

8

ỐNG!

Nếu internet là một loạt các ống , Unix là một loạt các ống - đại loại như:

cat ginormous-file | ssh user@host1 "cat | ssh user@host2 \"cat >out\" "

nên làm việc.

Nếu bạn cần duyệt qua nhiều máy chủ hơn, hãy thêm nhiều đường ống (và nhiều lớp \trích dẫn lồng nhau hơn ) nếu cần. (Tuy nhiên, lưu ý rằng nếu đường ống / thoát trở nên phức tạp đến mức bạn phải vẽ sơ đồ hoặc sử dụng để đếm trên ngón tay của mình để xác định số lần bạn phải tăng gấp đôi khi thoát , có lẽ đã đến lúc thừa nhận thất bại và thiết lập VPN phù hợp !)


1
Như Alex_www đã chỉ ra trong bình luận của anh ấy nếu bạn không cần tệp trung gian cho bất cứ điều gì bạn cũng có thể chỉ cần đầu ra tarxung quanh. (Cũng trong bạn không cần sự cattrong giai đoạn trung gian của đường ống - sshlà hạnh phúc để ăn stdin và chuyển tiếp nó Các. catChỉ làm cho tôi cảm thấy tốt hơn và là một giữ chỗ cho các lệnh hữu ích khác mà bạn có thể muốn sử dụng, giống như tee.)
voretaq7

Tôi nghĩ vấn đề của OP là không có máy mà cả hai có dữ liệu có thể làm cho các kết nối, cũng không có bất kỳ một máy tính mà có thể nhìn thấy tất cả mọi thứ và tất cả mọi người (đóng vai trò kết nối cho tất cả các đường ống).
MadHatter

1
@MadHatter Nếu đó là trường hợp kết hợp hai câu trả lời của chúng tôi sẽ hoạt động (kết nối với máy chủ dev, chuyển tiếp một cổng trở lại cổng SSH của máy chủ nhảy, sau đó chạy đường ống SSH qua cổng đó). Điều này tất nhiên làm cho giải pháp ngày càng kinh tởm đến mức mọi người sẽ bắt đầu phản đối bên ngoài văn phòng của bạn với những dấu hiệu lớn nói VPN! NOW!lên họ ...
voretaq7

Tại sao có. Vâng, họ sẽ. Hy vọng!
MadHatter

Làm điều này có nghĩa là máy chủ trung gian (trong trường hợp này user@host1) tại một thời điểm nào đó sẽ có đầy đủ cat ginormous-filelưu trữ tại bất kỳ điểm nào? Hoặc là dữ liệu chỉ được gửi trực tiếp đến user@host2? Hoặc là nó bằng cách nào đó được truyền phát? Làm thế nào có tarliên quan đến điều này? Tôi đoán nó có liên quan đến câu hỏi thứ hai đến câu hỏi cuối cùng tôi đã hỏi. Không ai trong số những câu hỏi này tu btw ...
hello_there_andy

1

Nếu tôi hiểu chính xác, bạn có hai máy chủ nhảy (jump-qa và jump-dev) bảo vệ hai máy chủ ứng dụng (app-qa và app-dev); các máy chủ nhảy có thể ssh với nhau; không có hộp nào khác ngoài máy chủ nhảy có liên quan có thể ssh đến máy chủ ứng dụng tương ứng. Các máy chủ ứng dụng có thể ssh đến noone. Một tệp sẽ được chuyển từ app-dev sang app-qa. Cả hai máy chủ nhảy đều thiếu không gian cho một bản sao tạm thời của dữ liệu.

Bạn có thể giải quyết điều này với đường hầm ssh. Chúng tôi thiết lập kết nối đến một máy chủ ứng dụng từ xa, mang theo một đường hầm từ xa kết nối lại với một cổng không được sử dụng trên máy chủ nhảy của nó. Chúng tôi thiết lập kết nối thứ hai từ một máy chủ nhảy đến máy chủ nhảy khác, mang theo một đường hầm nhặt đầu cuối của cổng chuyển tiếp từ xa từ đường hầm một và gửi nó đến cổng ssh của máy chủ ứng dụng khác.

Thiết lập các đường hầm (mỗi dấu phẩy này sẽ cần được chạy trong một cửa sổ riêng biệt trên jump-qa):

jump-qa% ssh app-qa -R 2345:localhost:2346
jump-qa% ssh jump-dev -L 2346:app-dev:22

Bây giờ bạn sẽ thấy rằng trên app-qa, bạn có thể làm telnet localhost 2345và nhận biểu ngữ ssh của app-dev. Sau đó, bạn có thể sao chép tệp dữ liệu:

app-qa% scp -P 2345 localhost:/path/on/app-dev/data.dat data.dat

Có hai hộp nhảy - một ở phía trước máy chủ ứng dụng QA và một ở phía trước máy chủ ứng dụng DEV. Các hộp nhảy có thể giao tiếp với nhau
Barry Chapman

Khách hàng có không gian cho một bản sao tạm thời không?
MadHatter

Không, không có đủ không gian
Barry Chapman

Khi bạn nói khách hàng, bạn đang đề cập đến máy chủ nào?
Barry Chapman

Tôi đã hiểu lầm. Hiểu biết hiện tại của tôi là không có khách hàng; Có hai máy chủ nhảy và hai máy chủ ứng dụng.
MadHatter
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.