@57105710hk

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Node.jsでRDSにSSH接続ができない

解決したいこと

Node.jsでアプリを開発しています。
RDSにSSHでポートフォワードで接続して、アプリを表示させたいのですがうまくできません。
以下の処理イメージです。
・PC→EC2にSSH接続
・EC2→RDSにSSH接続

発生している問題・エラー

接続に時間がかかり、タイムアウトエラーになってしまいます。
Error: connect ETIMEDOUT 'RDSのHOST':'RDSのPORT'
    at TCPConnectWrap.afterConnect [as oncomplete] (node:net:1187:16) {
  errno: -4039,
  code: 'ETIMEDOUT',
  syscall: 'connect',
  address: 'RDSのHOST',
  port: RDSのPORT
}

書いたコードは以下の通りです。

該当するソースコード

const { Client } = require('pg');
const ssh = require('tunnel-ssh');
const fs = require('fs');
// sshトンネルを開始
ssh({
   //SSHに関する情報
     username: "ec2-user",//適時変更
     port: "22",//適時変更
     host: "SSHのIP",//適時変更
     privateKey:fs.readFileSync('秘密鍵'),//適時変更
     password: '',//適時変更
     //RDSに関する情報
     dstPort: "5432",//適時変更
     dstHost: "RDSのHOST名",//適時変更
   //ローカルPCに関する情報
     localHost: "localhost",//適時変更
     localPort: "Node.jsをインストールしているPCのポート",//適時変更
}, function (errssh) {
    if (errssh) {
        console.log(errssh);
        process.exit();
    }
    console.log('connected');
    // postgresql
  // RDSに接続する際の情報を記載
    var client = new Client({
        host     : "HOST名",//適時変更
        user     : "postgres",//適時変更
        password : "パスワード",//適時変更
        database : "DB名",//適時変更
        port     : "5432"
    });
    client.connect();
});

自分で試したこと

その他のツールで正常に接続できるか確認するために、Tera TermやMk-2などのツールでSSH接続しましたが、正常に接続できクエリを発行することまでできました。
Node.jsで接続しようとするとうまくできませんでした。

0 likes

1Answer

var client = new Client({
-        host     : "HOST名",//適時変更
        user     : "postgres",//適時変更
        password : "パスワード",//適時変更
        database : "DB名",//適時変更
-        port     : "5432"
+        port     : "Node.jsをインストールしているPCのポート"
    });

としてみてください。

SSH tunnelによってローカルホストのNode.jsをインストールしているPCのポートとDBサーバーのポート5432が接続されているので、DBクライアントはローカルホストのNode.jsをインストールしているPCのポートへアクセスできると思います

0Like

Your answer might help someone💌