ssh tüneli üzerinden mongodb sunucusuna bağlanma


17

O was kolay bir kullanma AWS benim uzak MySQL sunucusuna bağlanmak için benim için sequelpro ancak MongoDB ile aynı şeyi yapıyor ile mücadele ediyorum.

Şöyle komut satırı üzerinden ssh tüneli kurmayı denedim:

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

Ben de bir ip adresi ile ana bilgisayar yerine ile denedim

fikir, 9999 numaralı bağlantı noktasındaki tüm mongodb bağlantılarını 27101 numaralı bağlantı noktasındaki ana bilgisayardaki bağlantıya iletmektir. Ancak komutu çalıştırdığımda:

mongo --host localhost --port 9999

bağlantı başarısız, bunun yerine bunu alıyorum:

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

Eğer koşmak sudo netstat -plntben (sırayla görünüyor) aşağıdaki olsun:

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  

yanlış yaptığım hakkında bir fikrin var mı?

update: son fonksiyonel komut şöyle görünür (kredi kenster'e gider ):

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

burada -fNkomut bu komutun arka planda çalışmasını sağlar

Yanıtlar:


23

"Kanal 2" ve "kanal 3" satırları şöyledir ssh. sshdUzak sunucuda örneği bir tünel bağlantısı sunmak amacıyla port 27017 host.com bağlanmaya çalışıyor ve bir hata "bağlantı zaman aşımına uğradı" oluyor.

Başka bir deyişle, sshduzak sunucuda tünelin hedefine ulaşamıyor. Uzak ana bilgisayar da sözde tünel oluşturduğunuz ana bilgisayar olduğundan, belirli sorunun ne olduğunu söylemek zor. "Host.com" birden fazla IP adresine çözüm olabilir. Kümedeki bir sunucuya SSH bağlantısı yapıyorsunuz ve sonra kümedeki farklı bir sunucu tünel hedefi olarak seçiliyor. Tünel hedefini "host.com" yerine "localhost" olarak değiştirmeyi deneyebilirsiniz:

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

Güncelleme:

"-L 9999: localhost: 27017" ssh, yerel sunucudaki istemcinin 9999 numaralı bağlantı noktasındaki bağlantıları dinlediği anlamına gelir . Bağlantı sshdalındığında, uzak sunucudaki örnekle bağlantıyı tüneller . Uzak sshdörnek oradan localhost'a bağlanır: 27017. Yani "localhost" burada uzak sunucu açısından.

Netstat çıkışı ile, neden daha önce çalışmadığı biraz daha açıktır. "127.0.0.1:27017" bölümü, Mongodb'un uzak ana bilgisayardaki localhost (127.0.0.1) arayüzüne özellikle bağlı olduğu anlamına gelir. Ana bilgisayarın normal IP adresine bağlanmaya çalışarak bu mongodb örneğiyle doğrudan iletişim kuramazsınız - yalnızca bu mongodb örneğiyle yerel ana bilgisayar adresi üzerinden iletişim kurabilirsiniz. Ve tabii ki, localhost olduğundan, yalnızca aynı ana bilgisayarda çalışan bir istemciden iletişim kurabilirsiniz.

Yani, şimdi bunu yapmanın yolu - ssh aracılığıyla sunucuya bir bağlantıyı tünelleyin ve oradan localhost'a bağlanın - bunu yapmanın yolu.


Bu gerçekten garip .. kullanma şekliniz -Lssh man sayfası ile çelişiyor gibi görünüyor: -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.açıkça hostuzak sunucunun ev sahibi olduğunu söylüyor .. yerel için mi kullanıyorsunuz?
abbood

Ben bir ip adresi ile aynı komutu denedim .. ama aynı sonuç .. btw Eğer yardımcı olursa dinleme hizmetleri için netstat çalışan sonucu göstermek için sorum güncel
abbood

Burada ve burada okuduktan sonra yolunuz doğru şekilde çıkıyor. Ancak bir sorum var .. ilk bağlantıda adam komuta neden gerekli olduğunu açıklar ->
abbood

1
ssh -L 27017: myserver: 27017 user @ myserver localhost üzerindeki 27017 numaralı bağlantı noktasını dinlemeli, sonra sunucuma ssh bağlantısı üzerinden tünel oluşturmalı ve sonra 27017 numaralı bağlantı noktasındaki myserver'ı tıklamalısınız. Şimdi, myserver yalnızca localhost üzerinden dinliyorsa ana bilgisayar adı harici IP adresine işaret ediyor olabilir. Bu durumda, ssh -L 27017: localhost: 27017 user @ myserver
abbood

bunun ne anlama geldiğini açıklar mısınız? 'hostname yalnızca harici IP adresini gösteriyor' ne anlama geliyor?
abbood

-1

MonboDB'yi Robo 3T GUI kullanarak uzaktan başarıyla bağlamak için Ubuntu 18 Vagrant kutumda birkaç yapılandırma yaptım. Aşağıdaki adımlarda açıkladım.

  1. Ubuntu sunucusunda, mongo kabuk çalışmasını açmak için:
    $ mongo
    
  2. Mongo kabuğunun içine yeni bir yönetici kullanıcı oluşturmak için aşağıdaki komutu yazın.

    > use admin;
    > db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
    
  3. Mongodb varsayılan olarak yalnızca localhost'tan bağlantılara izin verecek şekilde yapılandırılmıştır (IP 127.0.0.1). Herhangi bir IP adresinden uzak bağlantılara izin vermeliyiz. Aşağıdaki değişiklik yalnızca geliştirme sunucunuzda yapılmalıdır. Aç etc / mongod.conf dosyası ve şu değişikliği yapmak.

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

    Ayrıca aynı mongod.conf dosya uncomment güvenlik seçeneği ve aşağıda gösterildiği gibi yetkilendirme seçeneği ekleyin .

    security:
        authorization: enabled
    
  4. Kaydedin ve mongod.conf dosyasını kapatın ve mongodb sunucusunu yeniden başlatın.

    $ sudo servcie mongod restart
    
  5. Robo 3T GUI aracını indirin ve yükleyin.

  6. Robo 3T GUI'de, bağlantı ayarlarında, aşağıdaki ekran görüntülerinde gösterildiği gibi birkaç değişiklik yapmanız gerekir.

resim açıklamasını buraya girin

Daha önce oluşturduğunuz mongodb admin veritabanı kullanıcı adını ve şifresini girin .

resim açıklamasını buraya girin

Burada, Ubuntu 18 Vagrant kutusu ssh kimlik bilgilerimi girdim.

resim açıklamasını buraya girin

Değişiklikleri ve basın kaydet bağlantı bağlantı cezası çalışıp çalışmadığını görmek için simgeyi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.