You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java通过SSH连接Amazon Neptune数据库

Java通过SSH隧道连接NeptuneDB的实现方案

方案1:直接使用已搭建完成的本地SSH隧道

该方案无需修改核心业务逻辑,直接复用你已经建好的SSH端口映射即可:

  • 假设你的本地SSH隧道规则为:本地127.0.0.1:映射端口 转发到远端Neptune实例的Neptune端点:8182(Neptune默认端口为8182,开启IAM认证时也可使用443端口)
  • Java代码里直接将Neptune连接地址指向本地映射端口,和直连Neptune的代码逻辑完全一致

Gremlin Java Driver连接示例:

import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.Client;

public class NeptuneConnectDemo {
    public static void main(String[] args) {
        Cluster cluster = Cluster.build()
                // 指向本地SSH隧道入口
                .addContactPoint("localhost")
                // 替换为你本地实际映射的端口
                .port(8182)
                .enableSsl(true)
                // 若Neptune开启IAM认证,在此处添加SigV4签名配置即可,和常规连接逻辑一致
                .create();
        Client client = cluster.connect();

        // 执行查询逻辑
        client.submit("g.V().limit(10)").forEach(result -> System.out.println(result));

        // 释放资源
        client.close();
        cluster.close();
    }
}

注意:如果开启了SSL证书校验,需要将Neptune的CA证书导入本地JDK信任库,或配置SSL上下文跳过主机名校验(生产环境不推荐)

方案2:Java代码内置SSH端口转发(无需提前手动搭建隧道)

如果不想单独维护SSH隧道进程,可以在Java代码中引入SSH工具库实现动态端口转发,程序启动时自动建立隧道、关闭时自动销毁:

依赖引入(Maven为例,使用JSch实现SSH功能)

<dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jsch</artifactId>
    <version>0.1.55</version>
</dependency>
<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>gremlin-driver</artifactId>
    <version>3.6.2</version>
</dependency>

完整示例代码

import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import org.apache.tinkerpop.gremlin.driver.Cluster;
import org.apache.tinkerpop.gremlin.driver.Client;

public class NeptuneEmbeddedSshDemo {
    public static void main(String[] args) throws Exception {
        // SSH跳板机配置
        String sshHost = "你的SSH跳板机地址";
        int sshPort = 22;
        String sshUser = "SSH登录用户名";
        String sshPassword = "SSH登录密码";
        // Neptune实例配置
        String neptuneHost = "你的Neptune实例端点";
        int neptunePort = 8182;
        // 本地转发端口自定义
        int localForwardPort = 8182;

        // 建立SSH会话
        JSch jsch = new JSch();
        // 若使用私钥认证,替换密码配置为该行:jsch.addIdentity("你的私钥文件本地路径");
        Session session = jsch.getSession(sshUser, sshHost, sshPort);
        session.setPassword(sshPassword);
        // 跳过主机密钥校验,生产环境建议配置已知主机列表替换该配置规避安全风险
        session.setConfig("StrictHostKeyChecking", "no");
        session.connect();
        // 配置端口转发规则
        session.setPortForwardingL(localForwardPort, neptuneHost, neptunePort);

        // 连接Neptune逻辑和方案1完全一致
        Cluster cluster = Cluster.build()
                .addContactPoint("localhost")
                .port(localForwardPort)
                .enableSsl(true)
                .create();
        Client client = cluster.connect();

        // 执行业务查询
        client.submit("g.V().limit(5)").forEach(res -> System.out.println(res));

        // 按顺序释放资源
        client.close();
        cluster.close();
        session.disconnect();
    }
}

内容的提问来源于stack exchange,提问作者Tien Vu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 04:27:03