2016-07-21 2 views
1

내 자격 증명이 Robomongo에서 완벽하게 작동하지만 node.js와 연결할 수 없습니다.
ssh2 및 터널을 사용하여 연결을 시도했습니다. -ssh npm 모듈이며 두 번 실패했습니다.
년 - 몽고 연결이
년 - ssh 연결이 내가 SSH2 모듈과 함께 사용했던 코드Node.js를 사용하여 MongoDB 데이터베이스에 SSH 터널링 연결을 만드는 방법

키를 PEM로 만든 암호를 필요로하지 않는다, 나는 제대로 터널링을 설정할 수 있지만, 몽고의 연결이 실패합니다

var Client = require('ssh2').Client; 

var conn = new Client(); 
conn.on('ready', function() { 
    console.log('Client :: ready'); 
    //mongo connection 
     mongoose.connect('mongodb://localhost:27000/'); 
     var db = mongoose.connection; 
     db.on('error', console.error.bind(console, 'connection error:')); 
     db.once('open', function() { 
      console.log("database connection established"); 
      var users = db.collection('user'); 
      var getallUsers = function (date, callback){ 
       users.find({}).toArray(function(err,data){ 
        callback(data); 
       }) 
      }; 
      getallUsers(null, function (data){ 
       console.log('data :'+ data); 
      }); 
     }); 
    //end of mongo connection 
}).connect({ 
    host: '**.**.**.**.**', 
    port: 22, 
    username: 'ec2-user', 
    privateKey: key 
}); 

그리고 코드 터널 - SSH

var config = { 
    dstPort: 27000, 
    user: 'ec2-user', 
    host: '**.**.**.**.**', 
    privateKey: key 
}; 

var server = tunnel(config, function (error, server) { 
    if(error){ 
     console.log("SSH connection error: " + error); 
    } 
    console.log('database connection initalizing'); 
    mongoose.connect('mongodb://localhost:27000/'); 

    var db = mongoose.connection; 

    db.on('error', console.error.bind(console, 'connection error:')); 
    db.once('open', function() { 

     console.log("database connection established"); 

     var users = db.collection('user'); 
     var getallUsers = function (date, callback){ 
      users.find({}).toArray(function(err,data){ 
       callback(data); 
      }) 
     }; 
     getallUsers(null, function (data){ 
      console.log(data); 
     }); 

    }); 
}); 

는 내가 너와를 설정 한 후 일반 MongoDB를 연결 문자열을 사용할지 여부를 모르겠어요 nnel 또는
mongodb : // localhost : portnumber와 같은 데이터베이스를 localhost로 참조하십시오.
또는
MongoDB를 : //databasepath.subpath.mongodbdns.com : 27000

로컬 호스트 나에게 권한 거부 오류를 제공가, 후자는 나에게 mongoose 이후

답변

2

mscdex에서 언급했듯이 ssh2는 데이터베이스에 ssh 터널 연결을 만드는 데 사용할 좋은 모듈이 아닙니다. tunnel-ssh가 더 적절합니다.

dstPort : 여기

내가 사용했던 구성 옵션 원격 데이터베이스 연결 포트

localPort : dstPort 같은, 그것은 당신이 로컬 컴퓨터에 사용할 것 포트 수 있습니다

이름 : SSH 사용자 이름,

호스트 : SSH 주소

dstHost : 데이터베이스 연결 URL (... mongodbns.com),

의 PrivateKey : SSH 키 당신의 터널이 같은 mondodb으로 로컬 호스트에 몽구스를 통해 연결 연결되면 다음

: // localhost를 : 27000

var server = tunnel(config, function (error, server) { 
    if(error){ 
     console.log("SSH connection error: " + error); 
    } 
    mongoose.connect('mongodb://localhost:27000/'); 
    //...rest of mongoose connection 
} 
0

가 스트림을 전달 지원하지 않는 제한 시간을 제공합니다 기본 연결로 사용할 경우 로컬 포트 ​​(예 : 27000)에서 수신 대기하고 들어오는 연결을 ssh 연결을 통해 해당 포트로 전달해야합니다.

다행히도 이러한 기능을 제공하는 ssh2에 구축 된 제 3 자 모듈 (예 : tunnel-ssh)이 있습니다. 그 중 하나를 사용해보십시오.

+0

덕분에 (당신이 localPort에 정의 된 localport 사용) 나는 터널 -ssh에서 좋은 시간을 보냈다. 터널 -ssh에 대한 나의 코드는 위와 같다. – user3382714

+0

config 객체에서'user' 대신'username'을 시도 했습니까? – mscdex

관련 문제