繁体   English   中英

通过 SSH 连接到 MySQL 并使用 Spring Boot

[英]Connect to MySQL through SSH and by using Spring Boot

在我的Spring Boot app WAR 中,我有一个application.properties文件,其中定义了以下datasource属性:

spring.datasource.url=jdbc:mysql://localhost/test?autoReconnect=true&useSSL=false&rewriteBatchedStatements=true
spring.datasource.username=used
spring.datasource.password=password
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

有了这个,我就可以连接到数据库了。

现在,我想通过SSH tunnel连接到另一个数据库。 我应该如何指定spring.datasource.url来获得这样的连接?

请注意,我不想编写任何样板 Java 代码来执行此 SSH 隧道!

PS 我用谷歌搜索但无法在任何地方找到满意的答案。

和我一样的问题。

我的解决方案解决了,

第 1 步:在 VPC public su.net 中创建ec2 实例

第 2 步:安全组中,此 ec2 实例必须允许端口 22 (SSH)

第三步: RDS MySQL必须允许ec2实例访问的private-ip

第 4 步:在 Dev Local ~> setup forward listener tcp_ip open terminal

ssh -f <user>@<ec2-public-dns> -L <localhost_ip>:<localhost_port>:<rds_mysql_host_ip>:<rds_mysql_host_port> -N -i <private_key>.pem

例子:

ssh -f ec2-user@ec2-public-dns -L dev-mysql-c-lib.internal:3306:***.ap-southeast-1.rds.amazonaws.com:3306 -N -i ~/.ssh/ec2-instance.pem

在此处输入图像描述

第五步:在文件config application-dev.yml

将主机从public-dns更改为internal-dns

例子:

主机: '***.ap-southeast-1.rds.amazonaws.com'

主机: 'dev-mysql-c-lib.internal'

spring.datasource.url: jdbc:mysql://dev-mysql-c-lib.internal:3306/mydb

最后运行 Spring 启动

查找 MySQL已连接

为我工作。 ^____^

我认为spring不能为您创建SSH隧道。 如果要在代码中执行此操作,则需要类似jsch的框架。

最好的解决方案是在服务器上手动创建SSH隧道或使用autossh(保持它正常运行)。 要手动创建隧道,请登录到您的应用服务器并在屏幕上运行以下命令:

ssh -L 3307:localhost:3306 serverIp

3306是运行mysql的端口。 3307是您正在转发的端口。 通过此隧道,您现在可以使用以下方法进行连接:

spring.datasource.url=jdbc:mysql://localhost:3307/

与您在问题中使用的相同,除了useSSL = true,如果数据库使用自签名证书,还可能用verifyServerCertificate = false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM