c#与access建立连接用作登录_使用 ssh tunnel 连接远程数据库服务(java版)

场景: 现有数据库服务器 C , 本地机器无法直连,需通过跳板机(堡垒机) B 才能连接服务器 C. 现在想要在本地开发程序,需要能在本地机器 A 连接数据库服务器 C 进行数据库相关操作.

解决方案: 使用 ssh 从本地机器登录跳板机 B, 建立 ssh tunnel , 将 B 作为代理服务器,传达本地机器操作数据库的指令,从服务器 C 接收到返回值后,然后转回本地机器 A.

在下面的代码示例中, A 即是 127.0.0.1 , B 是 192.168.100.11 , C 是 192.168.100.10

依赖 jar 包:

b99c689f597d2935ac67fb3d614282aa.png

配置文件:

b57f9abbf2446af141904190fdd2e100.png

db.properties :

# 远程数据库服务 ip 地址
gp.server.ip=192.168.100.10
# 数据库服务端口号
gp.server.port=5432
# 要连接的数据库名称
gp.database=test
# 连接数据库使用的用户
gp.user=postgres
# 数据库用户密码
gp.password=postgres
# 要连接的 schema 名称
gp.schema=public
# 映射到本地机器的端口号
local.port=6666

ssh.properties :

# linux 堡垒机地址
base.server.ip=192.168.100.11
# 堡垒机 ssh 开放端口
base.server.port=22
# 堡垒机登录用户
base.server.user=admin
# 堡垒机登录用户密码
base.server.password=admin123

项目架构:

d3d7854699888c91a5d7507f730136f2.png

建立连接相关代码:

public 

DbUtil :

private static Logger LOG = Logger.getLogger(DbUtil.class);

private static SshService ss = SshService.getInstance();
private static String pgDriver = "org.postgresql.Driver";
private static Connection pgConn = null;

private static void connect(){
      if (pgConn == null) {
            try {
                Class.forName(pgDriver);
                int port = ss.portMapping(DbConf.getLocalPort());
                pgUrl = "jdbc:postgresql://127.0.0.1:" + port + "/" + DbConf.getGpDatabase();
                pgConn = DriverManager.getConnection(pgUrl, DbConf.getGpUser(), DbConf.getGpPassword());
            } catch (ClassNotFoundException e) {
                LOG.error("获取 greenplum 连接失败!", e);
                ss.closeSession();
            } catch (SQLException e) {
                LOG.error("获取 greenplum 连接失败!", e);
                ss.closeSession();
            }
        }
}

public static Connection getPgConn() {
        if (pgConn == null) {
            connectPgSql();
        }
        return pgConn;
  }

public static void closePgConn() {
        if (pgConn != null) {
            try {
                pgConn.close();
                pgConn = null;
            } catch (SQLException e) {
                LOG.error("关闭 greenplum 连接失败!", e);
            }
        }
    }

代码与可直连服务代码区别:

  1. 连接 url 中的 ip 地址为映射之后绑定的 ip地址(本地机器,直接写 127.0.0.1),端口号为映射的端口
  2. 在进行连接之前需要先使用 ssh 建立与代理服务器的连接,并进行端口映射操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值