如何在我自己的代码中执行与 IntelliJ 数据库 SSH 隧道等效的操作?
How can I do the equivalent of the IntelliJ database SSH tunnelling in my own code?
我正在试验位于私有子网中的 AWS RDS postgres 实例。
为了访问我的其他私有 EC2 实例,我一直在使用 SSH bastion。
这一切都很好,但后来我发现 IDEA 实际上已经可以帮助我访问我的私有 RDS 实例。
我所要做的就是在 IDEA 数据源设置中配置 "Use SSH tunnel" 部分:
太棒了,它成功了 - 该死的我喜欢 IDEA。
但问题是……如何它是如何工作的?
IDEA 是否只是在幕后为我做一些疯狂的事情SSH tunnelling(这样的话,我印象更深了)?
或者这是我可以在自己的代码中利用的 Postgres JDBC 驱动程序的一个特性?也就是说,有没有什么方法可以配置 Postgres JDBC 来执行到我的 RDS 实例的 SSH 隧道?
我真的很喜欢这种方式,它避免了必须事先在 OS 级别设置特定的隧道配置,like this。
所以问题是:如何在我的项目中仅使用代码来完成与 IDEA 相同的操作?
接受了 jdevelop 的回答。
这是我用来测试的 groovy 片段,供可能想要这样做的其他人使用:
JSch jsch = new JSch()
jsch.addIdentity("~/mykeys/bastion.pem")
jsch.setConfig("StrictHostKeyChecking", "no")
Session session=jsch.getSession("ec2-user", bastionServer, 22)
session.connect()
int localPort = 65432
session.setPortForwardingL(localPort, dbHostServer, dbHostPort)
testDbConnection(
"localhost", Integer.toString(localPort), dbName, dbUser, dbPassword)
session.disconnect()
是的,IntelliJ 会为您建立 SSH 隧道。
在代码中执行此操作的最简单方法是查看 JSch and their port forwarding example
我正在试验位于私有子网中的 AWS RDS postgres 实例。
为了访问我的其他私有 EC2 实例,我一直在使用 SSH bastion。
这一切都很好,但后来我发现 IDEA 实际上已经可以帮助我访问我的私有 RDS 实例。
我所要做的就是在 IDEA 数据源设置中配置 "Use SSH tunnel" 部分:
太棒了,它成功了 - 该死的我喜欢 IDEA。
但问题是……如何它是如何工作的?
IDEA 是否只是在幕后为我做一些疯狂的事情SSH tunnelling(这样的话,我印象更深了)?
或者这是我可以在自己的代码中利用的 Postgres JDBC 驱动程序的一个特性?也就是说,有没有什么方法可以配置 Postgres JDBC 来执行到我的 RDS 实例的 SSH 隧道?
我真的很喜欢这种方式,它避免了必须事先在 OS 级别设置特定的隧道配置,like this。
所以问题是:如何在我的项目中仅使用代码来完成与 IDEA 相同的操作?
接受了 jdevelop 的回答。
这是我用来测试的 groovy 片段,供可能想要这样做的其他人使用:
JSch jsch = new JSch()
jsch.addIdentity("~/mykeys/bastion.pem")
jsch.setConfig("StrictHostKeyChecking", "no")
Session session=jsch.getSession("ec2-user", bastionServer, 22)
session.connect()
int localPort = 65432
session.setPortForwardingL(localPort, dbHostServer, dbHostPort)
testDbConnection(
"localhost", Integer.toString(localPort), dbName, dbUser, dbPassword)
session.disconnect()
是的,IntelliJ 会为您建立 SSH 隧道。
在代码中执行此操作的最简单方法是查看 JSch and their port forwarding example