You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用JSch实现SSH远程端口转发?及连接配置疑问

使用JSch实现SSH远程端口转发及会话选项设置

没问题,JSch完全可以实现你要的远程端口转发功能,而且也能灵活设置各种SSH会话选项,不用换其他库。下面一步步给你讲怎么做:

一、设置SSH会话选项

在创建Session实例后,你可以通过session.setConfig()方法配置各类SSH连接选项,比如禁用严格主机密钥检查(测试场景常用,生产环境建议配置可信主机列表)、设置连接超时等。示例代码如下:

JSch jsch = new JSch();
Session session = jsch.getSession("username", "host", port);

// 禁用严格主机密钥检查(测试用,生产环境不建议这么做)
session.setConfig("StrictHostKeyChecking", "no");
// 设置连接超时时间(单位:毫秒)
session.setTimeout(30000);
// 如果用密码认证,直接设置密码
session.setPassword("your_password");

二、实现远程端口转发(对应ssh -R abc:8080:localhost:80 mysite.com

你要的命令属于远程端口转发:将远程服务器(mysite.com)上指定地址abc的8080端口请求,转发到本地的80端口。在JSch里可以用session.setPortForwardingR()方法实现,参数对应关系如下:

  • 第一个参数:远程服务器的绑定地址(对应命令里的abc
  • 第二个参数:远程服务器的监听端口(对应命令里的8080
  • 第三个参数:本地目标主机(这里是localhost,即你的本地机器)
  • 第四个参数:本地目标端口(对应命令里的80

完整的可运行示例代码:

try {
    JSch jsch = new JSch();
    // 替换成你的远程服务器信息:用户名、主机地址、SSH端口(默认22)
    Session session = jsch.getSession("your_username", "mysite.com", 22);

    // 配置会话选项
    session.setConfig("StrictHostKeyChecking", "no");
    session.setPassword("your_password"); // 也可以用密钥认证,更安全

    // 建立SSH连接
    session.connect();

    // 建立远程端口转发
    session.setPortForwardingR("abc", 8080, "localhost", 80);

    System.out.println("远程端口转发已成功建立,保持连接中...");

    // 保持连接不中断,这里用线程休眠模拟,实际场景可以根据业务逻辑调整
    Thread.sleep(Long.MAX_VALUE);

} catch (JSchException | InterruptedException e) {
    e.printStackTrace();
} finally {
    // 最后记得关闭连接
    if (session != null && session.isConnected()) {
        session.disconnect();
    }
}

三、其他可选SSH库(按需选择)

如果你之后考虑更换库,也可以参考这两个成熟的开源库:

  • Apache MINA SSHD:基于NIO的高性能SSH库,API设计更现代化,功能覆盖全面
  • SSHJ:轻量级SSH客户端库,API简洁直观,适合快速开发

不过既然你已经在使用JSch,它完全能满足你的需求,没必要特意更换——JSch是非常成熟的SSH客户端库,被大量项目广泛采用。

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

火山引擎 最新活动