postgresql - 如何在我自己的代码中执行与 IntelliJ 数据库 SSH 隧道等效的操作?

标签 postgresql intellij-idea ssh

我正在试验位于私有(private)子网中的 AWS RDS postgres 实例。

为了访问我的其他私有(private) EC2 实例,我一直在使用 SSH bastion .

这一切都很好,但后来我发现 IDEA 实际上已经可以帮助我访问我的私有(private) RDS 实例。

我所要做的就是在 IDEA 数据源设置中配置“使用 SSH 隧道”部分: IDEA Datasource SSH tunnel settings

太棒了,它成功了 - 该死的我喜欢 IDEA。

但问题是……它是如何工作的?

IDEA 只是在做一些疯狂的事情吗 SSH tunnelling对幕后的我来说(在这种情况下,我印象更深刻)?

或者这是我可以在自己的代码中利用的 Postgres JDBC 驱动程序的一个特性?也就是说,有没有什么方法可以配置 Postgres JDBC 来执行到我的 RDS 实例的 SSH 隧道?

我真的很喜欢这种方式,它避免了必须事先在操作系统级别设置特定的隧道配置,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和他们的 port forwarding example

关于postgresql - 如何在我自己的代码中执行与 IntelliJ 数据库 SSH 隧道等效的操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29725291/

相关文章:

c# - SSH.NET - 已建立的连接被主机中的软件中止

postgresql - Postgres 全文搜索按位置排序

database - 数据库导入后 Postgres autovacuum 高 cpu/磁盘

Scala IntelliJ 2016 未运行代码

debugging - 如何调试已部署的 Grails 应用程序

java - 在 intellij 的 GWT 配置中更改 Super Dev Mode 端口参数

macos - 打开ssh连接并在启动时保持打开状态

postgresql - Groovy-grails gsp表中的sql.rows

node.js - Sequelize 无法连接到 docker 上的 postgres

linux - ssh,协议(protocol)主要版本不同