그것은이었다 쉽게 사용 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 상자에서 몇 가지 구성을 수행했습니다. 다음 단계에서 설명했습니다.
- 우분투 서버에서 mongo shell을 실행하려면 다음을 실행하십시오.
$ mongo
-
mongo 쉘 내부에 다음 명령을 입력하여 새 관리자를 작성하십시오.
> use admin; > db.createUser({user:"admin", pwd:"password", roles:[{ role: "root", db: "admin" }]});
-
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
-
mongod.conf 파일을 저장하고 종료 한 후 mongodb 서버를 다시 시작하십시오.
$ sudo servcie mongod restart
-
Robo 3T GUI 도구를 다운로드하여 설치하십시오.
-
Robo 3T GUI의 연결 설정에서 아래 스크린 샷과 같이 약간만 변경하면됩니다.
이전에 작성한 mongodb admin 데이터베이스 사용자 이름 및 비밀번호를 입력하십시오 .
여기에 우분투 18 Vagrant box ssh 자격 증명을 입력했습니다.
변경 사항을 저장하고 연결 아이콘을 눌러 연결이 제대로 작동하는지 확인하십시오.