質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1851閲覧

javaで複数踏み台サーバを経由してMySQLに接続したい

kym_dki

総合スコア4

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

SSH

SSH(Secure Shell)は、セキュアチャネルを通してデータを交換するためのネットワークプロトコルです。リモートサーバーへのコマンド実行やファイル転送を行う時に一般的に使用されます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2021/07/28 07:00

編集2021/07/28 07:12

複数の踏み台サーバ(AWS EC2)を経由したMySQL接続がしたい

AWS上にAPサーバー、DBサーバーを立てて、それを経由したDB接続を実装したいのですが、実装方法が分かりません。

以下のサイトを参考にEC2上のDBサーバ経由でMySQLに接続ができることは確認済みです。

しかし、AWS EC2の設定を、APサーバ⇒DBサーバー⇒MySQLのルートのみアクセスできるよう
設定したところ、接続ができなくなりました。(当たり前ですが。)

上記ルート(APサーバ⇒DBサーバー⇒MySQL)でDBからデータを取得するにはどう実装するのかご教示いただけると幸いです。

参考にしたサイト

JavaだけでSSHトンネリングを経由してDB接続する

該当のソースコード

Java

1import com.jcraft.jsch.JSch; 2import com.jcraft.jsch.JSchException; 3import com.jcraft.jsch.Session; 4 5import java.sql.*; 6 7public class TunnelTest { 8 // DBサーバー接続情報 9  String sshUser = "usename"; 10  String sshPassword = ""; 11  String sshHost = "xx.xx.xx.xx"; // DBサーバーのIPアドレス 12  int nSshPort = "22"; 13 14 // MySQL接続情報 15  String remoteHost = "xx.xx.xx.xx"; 16  String nLocalPort = "3306"; 17  String nRemotePort = "3306"; 18 19 public static void main(String[] args) throws ClassNotFoundException, SQLException, JSchException { 20 JSch jsch = new JSch(); 21 jsch.addIdentity("pemファイルのパス"); 22 23 Session session = jsch.getSession( sshUser, sshHost, nSshPort); 24 session.setPassword(sshPassword); 25 26 final Properties config = new Properties(); 27 config.put("StrictHostKeyChecking", "no"); 28 session.setConfig(config); 29 30 session.connect(); 31 32 try { 33 session.setPortForwardingL( nLocalPort, nRemotePort, remoteHost ); 34 Class.forName("com.mysql.cj.jdbc.Driver"); 35 Connection con = DriverManager.getConnection( 36 "jdbc:mysql://127.0.0.1:3306/test", 37 "usename", 38 "pw" 39 ); 40 41 try (Statement st = con.createStatement()) { 42 try (ResultSet resultSet = st.executeQuery("show databases")) { 43 while (resultSet.next()) { 44 System.out.println(resultSet.getString(1)); 45 } 46 } 47 } 48 } finally { 49 session.disconnect(); 50 } 51 } 52}

上記ソースにどのようなコードを追加して実装すべきか、
また、複数の踏み台サーバを経由するDB接続をしている記事など
参考になりそうなサイト等ありましたらご教示いただけると幸いです。
よろしくお願いいたします。
ここまでお読みいただきありがとうございました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yu_1985

2021/07/28 10:27

構成がよくわからないのですが、DBサーバ上にMySQLが入っているのではなく別のサーバにあるということですか? そうだとしたらDBサーバと書いてあるものの役割は何でしょうか?
kym_dki

2021/08/02 01:23

yu_1985様 返信が遅れてしまい大変申し訳ありません。 ご質問ありがとうございます。 誤解を招く記述で申し訳ありません。 MySQLはDBサーバー上に入っております。
guest

回答1

0

ベストアンサー

JavaのみではなくAPサーバ上設定して良いのであれば
APサーバ上sshコマンドでポートフォワードしておけば可能かと思います。

↓以下など参照
https://qiita.com/Ayaka14/items/449e2236af4b8c2beb81

投稿2021/07/28 08:02

momotuwo

総合スコア155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kym_dki

2021/08/02 01:23

momotuwo様 ご回答ありがとうございます。 返信が遅れてしまい大変申し訳ありません。 参考記事を拝見させていただきました。 APサーバー上の設定次第ではできそうです。 Javaのみで実装できなかった場合はAPサーバーの設定も変更することも視野に入れて解決したいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問