Cách kết nối với máy chủ mongodb qua đường hầm ssh


16

Thật dễ dàng cho tôi để kết nối với máy chủ mysql từ xa của tôi trên AWS bằng cách sử dụng phần tiếp theo , tuy nhiên tôi đang vật lộn với việc làm điều tương tự với mongodb.

Tôi đã thử thiết lập một đường hầm ssh thông qua dòng lệnh như vậy:

ssh -fN -l root -i path/to/id_rsa -L 9999:host.com:27017 host.com

Tôi cũng đã thử nó với việc thay thế máy chủ bằng một địa chỉ IP

ý tưởng là chuyển tiếp tất cả các kết nối mongodb trên cổng 9999 sang kết nối trên máy chủ trên cổng 27101 .. tuy nhiên khi tôi chạy lệnh:

mongo --host localhost --port 9999

kết nối thất bại, tôi nhận được điều này thay vào đó:

MongoDB shell version: 2.6.0
connecting to: localhost:9999/test
channel 2: open failed: connect failed: Connection timed out
channel 3: open failed: connect failed: Connection timed out
2014-05-22T14:42:01.372+0300 DBClientCursor::init call() failed
2014-05-22T14:42:01.374+0300 Error: DBClientBase::findN: transport error: localhost:9999 ns: admin.$cmd query: { whatsmyuri: 1 } at src/mongo/shell/mongo.js:148
exception: connect failed

nếu tôi chạy, sudo netstat -plnttôi nhận được những thứ sau (có vẻ theo thứ tự):

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:8080            0.0.0.0:*               LISTEN      4242/node           
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1342/httpd2-prefork 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2552/sshd           
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      2505/master         
tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN      11719/mongod        
tcp        0      0 127.0.0.1:6379          0.0.0.0:*               LISTEN      16561/redis-server  

Bất cứ ý tưởng những gì tôi đang làm sai?

cập nhật: đây là cách lệnh chức năng cuối cùng trông như thế nào (tín dụng chuyển đến kenster ):

ssh -fN -i ~/path/to/id_rsa -L 6666:localhost:27017 root@remote.server.com

nơi -fNlệnh làm cho lệnh này chạy trong nền

Câu trả lời:


22

Các dòng "kênh 2" và "kênh 3" là từ ssh. Các sshdví dụ trên máy chủ từ xa đang cố gắng để kết nối với cổng host.com 27.017 để phục vụ kết nối đường hầm, và nó nhận được một "kết nối timed out" lỗi.

Nói cách khác, sshdtrên máy chủ từ xa không thể tiếp cận mục tiêu của đường hầm. Vì máy chủ từ xa cũng là máy chủ mà bạn được cho là đang đào hầm, thật khó để nói vấn đề cụ thể là gì. Có thể là "host.com" phân giải thành nhiều hơn một địa chỉ IP. Bạn đang tạo kết nối SSH tới một máy chủ trong cụm và sau đó một máy chủ khác trong cụm đang được chọn làm mục tiêu đường hầm. Bạn có thể thử thay đổi mục tiêu đường hầm thành "localhost" thay vì "host.com":

ssh -fN -l root -i path/to/id_rsa -L 9999:localhost:27017 host.com

Cập nhật:

"-L 9999: localhost: 27017" có nghĩa là sshmáy khách trên máy chủ cục bộ lắng nghe các kết nối trên cổng 9999. Khi có kết nối, nó sẽ kết nối với sshdthể hiện trên máy chủ từ xa. sshdVí dụ từ xa kết nối từ đó đến localhost: 27017. Vì vậy, "localhost" ở đây là từ quan điểm của máy chủ từ xa.

Với đầu ra netstat, rõ ràng hơn một chút tại sao nó không hoạt động trước đây. Phần "127.0.0.1:27017" có nghĩa là Mongodb được liên kết cụ thể với giao diện localhost (127.0.0.1) trên máy chủ từ xa. Bạn không thể liên hệ trực tiếp với thể hiện của mongodb bằng cách cố gắng kết nối với địa chỉ IP thông thường của máy chủ - bạn chỉ có thể liên hệ với thể hiện đó của mongodb thông qua địa chỉ localhost. Và tất nhiên, vì là localhost, bạn chỉ có thể liên hệ nếu từ một máy khách đang chạy trên cùng một máy chủ.

Vì vậy, cách bạn đang thực hiện bây giờ - tạo kết nối đến máy chủ thông qua ssh và sau đó kết nối với localhost từ đó - là cách để thực hiện.


Điều đó thực sự kỳ lạ .. cách bạn sử dụng -Ldường như mâu thuẫn với trang ssh man: -L [bind_address:]port:host:hostport Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.nó nói rõ ràng đó hostlà máy chủ của máy chủ từ xa .. bạn đang sử dụng nó cho địa phương?
abbood

Tôi đã thử cùng một lệnh với một địa chỉ IP .. nhưng kết quả tương tự .. btw Tôi đã cập nhật câu hỏi của mình để hiển thị kết quả của tôi khi chạy netstat cho các dịch vụ nghe nếu điều đó có ích
abbood

sau khi đọc xung quanh đâyở đây hóa ra cách của bạn là cách chính xác. tuy nhiên tôi có một câu hỏi .. trong liên kết đầu tiên, anh chàng giải thích lý do tại sao lệnh của bạn là cần thiết ->
abbood

1
ssh -L 27017: myserver: 27017 user @ myserver Nên nghe trên cổng 27017 trên localhost, sau đó chuyển qua kết nối ssh tới máy chủ của tôi và sau đó nhấn myserver trên cổng 27017. Bây giờ, nếu myserver chỉ nghe trên localhost, điều này sẽ không hoạt động, vì tên máy chủ có thể được trỏ đến địa chỉ IP bên ngoài. Nếu đó là trường hợp, hãy thử ssh này -L 27017: localhost: 27017 user @ myserver
abbood

bạn có thể vui lòng giải thích điều này có nghĩa gì? 'tên máy chủ chỉ trỏ đến địa chỉ IP bên ngoài' nghĩa là gì?
abbood

0

Tôi đã thực hiện một vài cấu hình trên hộp Ubuntu 18 Vagrant của mình để kết nối thành công MongoDB từ xa bằng GUI Robo 3T. Tôi đã giải thích trong các bước sau.

  1. Trên máy chủ Ubuntu, để mở shell mongo chạy:
    $ mongo
    
  2. Bên trong vỏ mongo, gõ lệnh sau để tạo người dùng quản trị mới.

    > use admin;
    > db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
    
  3. Theo mặc định mongodb được cấu hình để chỉ cho phép kết nối từ localhost (IP 127.0.0.1). Chúng tôi cần cho phép kết nối từ xa từ bất kỳ địa chỉ IP. Thay đổi sau chỉ nên được thực hiện trong máy chủ phát triển của bạn. Mở tập tin etc / mongod.conf và thực hiện thay đổi sau.

    # network interfaces
        net:
            port: 27017
            bindIp: 0.0.0.0   #default value is 127.0.0.1
    

    Cũng trong tùy chọn bảo mật uncomment file mongod.conf và thêm tùy chọn ủy quyền như hiển thị bên dưới.

    security:
        authorization: enabled
    
  4. Lưu và thoát tệp mongod.conf và khởi động lại máy chủ mongodb.

    $ sudo servcie mongod restart
    
  5. Tải xuống và cài đặt công cụ GUI Robo 3T.

  6. Trên GUI Robo 3T, trong cài đặt kết nối, bạn cần thực hiện một vài thay đổi như hiển thị bên dưới ảnh chụp màn hình.

nhập mô tả hình ảnh ở đây

Nhập tên người dùng và mật khẩu cơ sở dữ liệu quản trị viên mongodb mà bạn đã tạo trước đó.

nhập mô tả hình ảnh ở đây

Ở đây, tôi đã nhập thông tin ssh hộp Ubuntu 18 Vagrant của tôi.

nhập mô tả hình ảnh ở đây

Lưu các thay đổi và nhấn biểu tượng kết nối để xem kết nối có hoạt động tốt không.

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.