SSH 터널을 통해 mongodb 서버에 연결하는 방법 LISTEN

그것은이었다 쉽게 사용 AWS 내 원격 MySQL 서버에 연결하는 나를 위해 sequelpro을 하지만 나는 MongoDB를 함께 같은 일을하고와 사투를 벌인거야.

커맨드 라인을 통해 ssh 터널을 설정하려고 시도했습니다.

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

또한 호스트를 IP 주소로 바꾸어 시도했습니다.

아이디어는 포트 9999의 모든 mongodb 연결을 포트 27101의 호스트에있는 연결로 전달하는 것입니다. 그러나 명령을 실행할 때 :

mongo --host localhost --port 9999

연결이 실패하면 대신 이것을 얻습니다.

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

내가 실행 sudo netstat -plnt하면 다음과 같은 순서로 나타납니다.

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

내가 뭘 잘못하고 있는지 알아?

업데이트 :
이것이 최종 기능 명령의 모양입니다 (신용은 kenster 로갑니다 ).

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

를 Where -fN명령은 백그라운드에서이 명령을 실행할 수 있도록



답변

“채널 2″및 “채널 3″라인은입니다 ssh. sshd원격 서버 의 인스턴스가 터널 연결을 서비스하기 위해 host.com 포트 27017에 연결하려고하는데 “연결 시간 초과”오류가 발생합니다.

즉, sshd원격 서버에서 터널의 대상에 도달 할 수 없습니다. 원격 호스트도 터널링해야하는 호스트이므로 특정 문제가 무엇인지 말하기 어렵습니다. “host.com”이 둘 이상의 IP 주소로 확인 될 수 있습니다. 클러스터의 한 서버에 SSH 연결을하고 클러스터의 다른 서버를 터널 대상으로 선택합니다. “host.com”대신 터널 대상을 “localhost”로 변경해보십시오.

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

최신 정보:

“-L 9999 : localhost : 27017” ssh은 로컬 서버 의 클라이언트가 포트 9999의 연결을 수신함을 의미합니다 . 연결되면 sshd원격 서버 의 인스턴스로 연결을 터널링 합니다. 원격 sshd인스턴스는 거기에서 localhost : 27017로 연결됩니다. 여기서 “localhost”는 원격 서버의 관점에서입니다.

netstat 출력을 사용하면 이전에 작동하지 않은 이유가 조금 더 명확 해집니다. “127.0.0.1:27017″부분은 Mongodb가 원격 호스트의 로컬 호스트 (127.0.0.1) 인터페이스에 특별히 바인딩되어 있음을 의미합니다. 호스트의 일반 IP 주소에 연결하려고 시도하여 해당 mongodb 인스턴스에 직접 연결할 수 없습니다. 로컬 호스트 주소를 통해서만 해당 mongodb 인스턴스에 연결할 수 있습니다. 물론 로컬 호스트이므로 동일한 호스트에서 실행되는 클라이언트의 경우에만 연결할 수 있습니다.

따라서 지금하는 방식-ssh를 통해 서버에 대한 연결을 터널링 한 다음 거기에서 로컬 호스트에 연결하는 방법이 그것을 수행하는 방법입니다.


답변

Robo 3T GUI를 사용하여 MongoDB를 원격으로 성공적으로 연결하기 위해 Ubuntu 18 Vagrant 상자에서 몇 가지 구성을 수행했습니다. 다음 단계에서 설명했습니다.

  1. 우분투 서버에서 mongo shell을 실행하려면 다음을 실행하십시오.
    $ mongo
    
  2. mongo 쉘 내부에 다음 명령을 입력하여 새 관리자를 작성하십시오.

    > use admin;
    > db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
    
  3. mongodb는 기본적으로 localhost (IP 127.0.0.1)에서만 연결을 허용하도록 구성되어 있습니다. 모든 IP 주소에서 원격 연결을 허용해야합니다. 다음 변경 사항은 개발 서버에서만 수행해야합니다. etc / mongod.conf 파일을 열고 다음 변경을 수행하십시오.

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

    또한 동일한 mongod.conf 파일에서 보안 옵션의 주석 처리를 제거하고 아래와 같이 권한 부여 옵션을 추가하십시오 .

    security:
        authorization: enabled
    
  4. mongod.conf 파일을 저장하고 종료 한 후 mongodb 서버를 다시 시작하십시오.

    $ sudo servcie mongod restart
    
  5. Robo 3T GUI 도구를 다운로드하여 설치하십시오.

  6. Robo 3T GUI의 연결 설정에서 아래 스크린 샷과 같이 약간만 변경하면됩니다.

이전에 작성한 mongodb admin 데이터베이스 사용자 이름 및 비밀번호를 입력하십시오 .

여기에 우분투 18 Vagrant box ssh 자격 증명을 입력했습니다.

변경 사항을 저장하고 연결 아이콘을 눌러 연결이 제대로 작동하는지 확인하십시오.