如何通过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
相关产品推荐
相关产品推荐

