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

如何通过SSL/SSH连接SecureAS400的可运行示例及实现方案咨询

首先纠正一个认知误区:SecureAS400 并非用于适配SSH端口转发场景的组件,它的作用是直接与IBM i的SSL加密服务端口建立TLS加密连接。你当前的SSH隧道转发场景,无需替换原有AS400对象,仅需补全端口转发规则、手动指定AS400各服务的转发端口即可。

第一步:补全SSH端口转发规则

你之前仅转发了5250会话使用的23端口,JT400连接IBM i需要依赖多个专属服务端口,必须同步转发。
常用的非加密服务端口对应关系如下:

  • 8476:登录认证服务(必转,所有JT400操作都需要)
  • 8472:数据库访问服务(拉取数据必备)
  • 8470:远程命令服务
  • 8471:IFS文件服务
  • 8473:打印服务

调整后的SSH端口转发命令示例:
ssh -i Keys_rsa -L 50023:localhost:23 -L 58472:localhost:8472 -L 58476:localhost:8476 USER@HOST

上述命令将本地58472端口映射到远端IBM i的8472端口,本地58476端口映射到远端8476端口,可根据实际使用的服务增减转发规则。

第二步:AS400对象适配端口转发配置示例

AS400对象默认会访问IBM i的标准服务端口,走本地SSH隧道时需要手动指定各服务对应的本地转发端口,示例代码如下:

import com.ibm.as400.access.AS400;
import com.ibm.as400.access.AS400JDBCDataSource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;

public class IBMiTunnelConnectDemo {
    public static void main(String[] args) {
        AS400 as400 = null;
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            // 主机填本地回环地址,走本地SSH隧道转发
            as400 = new AS400("127.0.0.1", "IBM i系统用户名", "IBM i系统密码");
            
            // 手动指定各服务对应的本地转发端口
            as400.setPort(AS400.SIGNON, 58476); // 登录服务对应本地58476端口
            as400.setPort(AS400.DATABASE, 58472); // 数据库服务对应本地58472端口
            // 若用到其他服务,按对应关系添加配置即可,例如远程命令:
            // as400.setPort(AS400.COMMAND, 58470);

            // 测试登录服务连接
            as400.connectService(AS400.SIGNON);
            System.out.println("IBM i登录服务连接成功");

            // 数据库拉取数据示例
            AS400JDBCDataSource dataSource = new AS400JDBCDataSource(as400);
            dataSource.setLibraries("你要访问的库名");
            conn = dataSource.getConnection();
            stmt = conn.createStatement();
            rs = stmt.executeQuery("SELECT * FROM 你的表名 FETCH FIRST 5 ROWS ONLY");
            while (rs.next()) {
                System.out.println("查询结果:" + rs.getString(1));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            try { if(rs != null) rs.close(); } catch (Exception e) {}
            try { if(stmt != null) stmt.close(); } catch (Exception e) {}
            try { if(conn != null) conn.close(); } catch (Exception e) {}
            try { if(as400 != null) as400.disconnectAllServices(); } catch (Exception e) {}
        }
    }
}
可选:SecureAS400使用场景说明

如果你不需要走SSH隧道,而是要直接通过公网TLS加密连接IBM i的SSL服务端口,可以使用SecureAS400对象,IBM i默认SSL服务端口为9476(登录)、9472(数据库)等,配置示例如下:

import com.ibm.as400.access.SecureAS400;

// 初始化SecureAS400,主机填IBM i的公网地址
SecureAS400 secureAs400 = new SecureAS400("IBM i公网IP/域名", "用户名", "密码");
// 若使用默认SSL端口无需手动设置,端口有修改则手动指定
// secureAs400.setPort(AS400.SIGNON, 9476);
// secureAs400.setPort(AS400.DATABASE, 9472);
// 后续数据操作逻辑和普通AS400完全一致
注意事项
  • 运行Java程序前必须保持SSH隧道处于正常连接状态,隧道断开后所有连接会失效
  • 可提前用telnet 127.0.0.1 58476命令测试本地转发端口是否连通,排除网络问题
  • 生产环境禁止硬编码账号密码,建议从加密配置中心或环境变量读取敏感信息
  • 若IBM i侧启用了IP访问限制,需要确保SSH隧道所在服务器的IP在允许访问的白名单内

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:54:03