SSH đường hầm với nhiều chuyển tiếp cổng động


7

Tôi đang cố gắng theo dõi nhiều JVM chạy trên các máy chủ khác nhau thông qua một đường hầm ssh.

Nhờ một trong những bậc thầy UNIX ở đây, tôi đã quản lý để chạy cái này cho một máy chủ bằng cách:

  1. Chạy jstatdtrên máy chủ mục tiêu
  2. Thiết lập Visual VM để sử dụng 9696 làm cổng proxy vớ.
  3. Trên PC cục bộ của tôi, hãy chạy:

    ssh -L 2222:server1:22 bastion-host
    
  4. Trên PC cục bộ của tôi, hãy chạy:

    ssh -o port=2222 -D 9696 -L 1099:localhost:1099 localhost
    

Đây là mẹo. Bây giờ khi tôi thử và chuyển sang máy chủ thứ hai, tôi sẽ thử:

  1. Trên PC cục bộ của tôi, hãy chạy:

    ssh -L 3333:server2:22 bastion-host
    
  2. Trên PC cục bộ của tôi, hãy chạy:

    ssh -o port=3333 -D 9696 -L 2099:localhost:1099 localhost
    

Tuy nhiên, bước cuối cùng phàn nàn với:

bind: Address already in use
channel_setup_fwd_listener: cannot listen to port: 9696

Có ai quản lý để làm một cái gì đó tương tự?

Cập nhật:

Lý do điều này rất phức tạp là jstatd là một ứng dụng máy chủ RMI:

http://doad.oracle.com/javase/1.5.0/docs/tooldocs/share/jstatd.html

Như với các ứng dụng RMI, những ứng dụng này đăng ký với một cấu trúc lại. Sử dụng rmi thông qua tường lửa yêu cầu tôi sử dụng SOCKS như được mô tả ở đây:

http://doad.oracle.com/javase/1.4.2/docs/guide/rmi/faq.html#firewallOut

Thật không may, visualvm chỉ cho phép tôi đặt cổng proxy SOCKS một lần và tùy chọn -D sẽ không cho phép tôi chuyển tiếp cùng một cổng cục bộ tới cả hai máy chủ ...


Bạn không cần hai bộ đường hầm bạn có - bạn có thể ssh đến một máy và đường hầm ra khỏi nó vào một máy khác. Trả lời cập nhật để bao gồm đó.
EightBitTony

Điểm chuyển hướng cổng là 1099gì? Bạn có thể chính xác liệu bastion-hostcó thể kết nối đến server1server2không có tường lửa liên quan?
Stéphane Gimenez

Bạn đã thử sử dụng tùy chọn đơn giản nhất, ở cuối câu trả lời của tôi chưa, và nếu vậy, nó đã gây ra lỗi / vấn đề gì?
EightBitTony

@EightBitTony - Thật không may, điều này sẽ không hoạt động, vì rmi mở một cổng ngẫu nhiên sau khi kết nối được thiết lập. Mục đích của tùy chọn -D là báo cho máy chủ rmi biết nên sử dụng cổng nào. Tuy nhiên, tôi chỉ có thể chỉ định cổng proxy SOCKS một lần trong visualvm và 2 đường hầm của tôi không thể chia sẻ tùy chọn -D.
bộ công cụ

Câu trả lời:


5

Tôi có đúng không khi nghĩ rằng bạn đã có máy tính (máy tính A) và nói hai máy chủ (A và B) mà bạn không thể kết nối trực tiếp trên một cổng nhất định và vì vậy muốn chuyển sang chúng qua SSH?

Nếu vậy, bạn tạo hai đường hầm từ máy của mình (một đến từng máy chủ đích) trên các cổng cục bộ khác nhau bằng cách sử dụng -L không -D, sau đó trong công cụ giám sát của bạn, bạn kết nối với máy cục bộ của mình (không có cài đặt proxy) như thể đó là máy chủ từ xa bạn muốn kiểm tra.

ssh -L 9000:localhost:<local port jstatd listens on> user@server1
ssh -L 9001:localhost:<local port jstatd listens on> user@server2

Sau đó, bằng cách sử dụng màn hình cục bộ của bạn, bạn kết nối với localhost: 9000 và localhost: 9001 và các đường hầm đó kết nối bạn với jstatd của mục tiêu.

Nếu có một máy chủ trung gian, thì một đường hầm hai hop,

ssh -L 9000:server1:<local port jstatd listens on> user@bastion-host
ssh -L 9001:server2:<local port jstatd listens on> user@bastion-host

Hmm, nếu máy chủ pháo đài có thể nói chuyện với tất cả các JVM, thì

ssh -D 9000 user@bastion-host

Là đủ để tạo một proxy vớ, sau đó bạn có thể chỉ cần sử dụng qua cổng 9000.


Câu trả lời này có vẻ hữu ích, tôi đã định viết một cái gì đó tương tự, liệu downvoter có thể đưa ra một số lý do?
Stéphane Gimenez

3

Từ trang ssh:

 -D [bind_address:]port
         Specifies a local “dynamic” application-level port forwarding.
         This works by allocating a socket to listen to port on the local
         side, optionally bound to the specified bind_address.  Whenever a
         connection is made to this port, the connection is forwarded over
         the secure channel, and the application protocol is then used to
         determine where to connect to from the remote machine.  Currently
         the SOCKS4 and SOCKS5 protocols are supported, and ssh will act
         as a SOCKS server.  Only root can forward privileged ports.
         Dynamic port forwardings can also be specified in the configura‐
         tion file.

Bạn đang chỉ định cùng một cổng cục bộ để chuyển tiếp từ hai lần; Hãy thử -D 9697thiết lập thứ hai của bạn.


Thật không may, có vẻ như visualvm chỉ cho phép tôi thiết lập điều này một lần. Có cách nào để giái quyết vấn đề này không?
bộ công cụ

Sử dụng -L, không phải -D, như được chỉ định trong câu trả lời của @ EightBitTony. -D dành cho proxing theo kiểu SOCKS - ví dụ: định tuyến HTTP thông qua một đường hầm SSH.
John Hart

1

Bước cuối cùng là đủ: Nó không thể bắt đầu nghe ở cổng 9696. Đó là bởi vì nếu đó là đường hầm thứ hai của bạn, bạn nên sử dụng một cổng khác trong khi 9696 đang xử lý cổng đầu tiên.

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.