2016-07-11 3 views
0

Sequelizer를 사용하여 MySQL 데이터베이스에 연결하고 싶습니다. 지금 당장 Connection Refused Error가 발생합니다.터널 -ssh 모듈을 통한 sequelizer mysql 연결 시작

데이터베이스에 액세스하려면 SSH를 사용해야합니다. 여기 Mick Hansen에 따르면 https://github.com/sequelize/sequelize/issues/3753으로 SSH를 사용하는 한 가지 방법은 tunnel-ssh를 사용하여 터널을 설정 한 다음 Sequelizer를 시작하는 것입니다.

지금까지 성공하지 못했던 방법은 터널을 시작한 다음 터널이 열리면 Sequelizer가 인증되었는지 테스트합니다.

업데이트

  • 호스트 : 디지털 오션
  • CLI 성공 : 나는 디지털 오션 서버 2)에 1) SSH를 서버에서 MySQL과 3) 액세스에 루트 사용자로 모든 데이터베이스 정보를 로그인 할 수 있습니다.
  • Sequel Pro : Sequel Pro를 사용하여 데이터베이스에 로그인 할 수도 있습니다.
  • MySQL 127.0.0.1:3306 : mysql/my.cnf 파일을 기반으로 포트는 3306이고 바인드 주소는 127.0.0.1입니다. 구성 파일에는 skip-networking 대신에 localhost에서만 관련 정보를 듣는 것이 기본값입니다.
  • socketPath -> 오류 연결 TCP에서 소켓으로 전환하는 것이이 유형의 문제에 대해 때때로 작동하는 것처럼 보였지만 시도했을 때 계속 오류가 발생했습니다.
  • 이 오류 유형 - 은 "모든 구성된 인증 방법 실패"도움을

감사합니다 "오류 연결이 거부!"

코드 :

내 설정은 위의 객체로 설정
// sequelize config 
var sequelize = new Sequelize('database', 'user', 'pass', { 
    host: '127.0.0.1', 
    dialect: 'mysql', 
    port: 3306, 

    pool: { 
    max: 10, 
    min: 0, 
    idle: 20000 
    } 
}); 

// tunnel config 
var config = { 
     user:'user', 
     host:'sshHost', 
     port:22, 
     dstHost:'127.0.0.1', 
     dstPort:3306, 
     srcHost:'127.0.0.1', 
     srcPort:3306, 
     localHost:'127.0.0.1', 
     localPort: 3306, 
     privateKey:require('fs').readFileSync('/path/to/key') 
    }; 

var tunnel = require('tunnel-ssh'); 

// initiate tunnel 
tunnel(config, function (error, server) { 
    //.... 
    if(error) { 
    console.error(error); 
    } else { 
    console.log('server:', server); 

    // test sequelize connection 
    sequelize 
     .authenticate() 
     .then(function(err) { 
      console.log('Connection established'); 
     }) 
     .catch(function(err) { 
      console.error('unable to establish connection', err); 
     }) 
    } 
}) 

가, 내가 "모든 구성 방법이 오류를 실패"얻는다.

내 구성을 아래로 변경하면 "Sequelize Error Connection Refused"( 오류)가 표시됩니다.

// tunnel config 
    var config = { 
      user:'user', 
      host:'sshHost', 
      port:22, 
      dstHost:'127.0.0.1', 
      dstPort:3306, 
      //srcHost:'127.0.0.1', 
      //srcPort:3306, 
      //localHost:'127.0.0.1', 
      //localPort: 3306, 
      privateKey:require('fs').readFileSync('/path/to/key') 
     }; 
+0

코드의 sequelize init 비트를 표시 할 수 있습니까? –

+0

@ code-jaff에게 감사의 말을 전하고, sequelize init 비트를 페이지 상단에 추가했습니다. –

답변

0

localPort은 로컬 시스템에서 수신하는 포트입니다. 현재 27000로 정의되어 있지만 Sequelize 설정은 3306으로 설정되어 있습니다.

+0

감사합니다 mscdex. sequelizer 포트를 27000으로 변경하거나 config.localPort를 3306으로 변경하면 privateKey가 유효한 값이 아니라는 오류가 발생합니다. _ssh2/lib/client.js : 226_ ** 새로운 오류가 발생합니다 ('privateKey 값에 (유효한) 개인 키가 없습니다 **) –

+0

개인 키 파일이 유효한 PEM 형식의 개인용인지 확인 했습니까? SSH 키? – mscdex

+0

내 오류 일 수 있습니다. 내 데이터베이스에 Sequel Pro를 통해 로그인 할 때 언급 한 개인 키를 사용합니다 .Steel Pro를 사용하면 성공적으로 로그인 할 수 있습니다. _Selel에 대한 ssh 키의 형식간에 차이가있을 수 있습니다. 프로와 포맷에 후속편이 필요하다? _ 다시 한번 감사드립니다. –