我正在尝试通过SSH隧道从本地JAVA程序连接到RDS数据库到EC2实例以进行调试。我正在尝试将SSH隧道连接到EC2实例,然后将端口转发到RDS数据库。这是我的代码。
final int localPort = 9999;
// Create BaiscDataSource.
final String databaseURL = "jdbc:mysql://localhost:" + localPort + "/database";
// SSH Tunnel.
final JSch jsch = new JSch();
jsch.addIdentity(sshKeyPath);
this.session = jsch.getSession(ec2Username, ec2Host, 22);
this.session.setTimeout(0);
this.session.setConfig("StrictHostKeyChecking", "no");
this.session.connect();
this.session.setPortForwardingL(localPort, rdsHost, 3306);
请帮忙!
编辑:looply_dev于2012年10月2日下午4:17
答案 0 :(得分:1)
我得到了你的工作,但没有使用jcraft jsch库。我能够在一个单独的线程上从我的java应用程序中执行一个终端命令。这是终端命令:
ssh -i /path/to/pem/ -L -N localport:remotehost:remoteport remoteuser@remotetunnelserver.com
然后在你的java jdbc适配器代码中使用上面的localport连接127.0.0.1
:
jdbc.mysql://127.0.0.1:1345/databasename/user=user&password=pass
我认为问题是-N选项在命令中创建一个隧道,只能通过隧道执行远程命令,默认情况下在jcraft的jsch libraray中是真的,我无法将默认值设置为false执行远程命令。
答案 1 :(得分:0)
我使用了堡垒主机并使用了本地端口转发。
ssh -i ec2key.pem -N -L 3306:my-dev-db.cluster-cdnxxxxxxxxxx.ap-southeast-1.rds.amazonaws.com:3306 ec2-user@54.253.196.193
54.253.196.193 是卑鄙主机的IP。
最后,我使用AWS Secrets Manager连接到localhost:3306。但是您也应该能够使用数据库用户名和密码。