카테고리 보관물: Server

Server

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 자격 증명을 입력했습니다.

여기에 이미지 설명을 입력하십시오

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


답변