Jsch工具 - JschUtil
# Jsch工具 - JschUtil
介绍
JschUtil
是 Hutool 基于 JSch 库的封装,主要用于解决在跳板机(堡垒机)环境中,如何穿透堡垒机访问内部主机端口的问题。JSch 是一个 Java 实现的 SSH 客户端库,可以用来执行远程命令、文件传输、端口映射等操作。JschUtil
通过简化 JSch 的使用,让开发者更加轻松地操作 SSH 会话和端口映射。
# 依赖引入
在项目中使用 JschUtil
时,需要引入 JSch 库作为依赖:
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>${jsch.version}</version>
</dependency>
2
3
4
5
注意:JSch 的最新版本为
0.1.55
,建议引入等于或高于此版本的依赖。
# 1. SSH连接到远程主机
使用 JschUtil
可以快速建立与远程主机的 SSH 连接。以下是一个简单的示例,演示如何连接到远程主机:
# 建立 SSH 连接
import cn.hutool.extra.ssh.JschUtil;
import com.jcraft.jsch.Session;
public class JschExample {
public static void main(String[] args) {
// 建立与远程主机的 SSH 会话
Session session = JschUtil.getSession("10.1.1.1", 22, "test", "123456");
// 在这里可以执行其他操作,如端口映射、命令执行等
// 关闭会话,释放资源
JschUtil.close(session);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
代码解析:
JschUtil.getSession(String host, int port, String username, String password)
:用于建立与远程主机的 SSH 会话。host
:目标主机地址。port
:SSH 端口,默认是 22。username
:登录用户名。password
:登录密码。
JschUtil.close(Session session)
:用于关闭 SSH 会话,释放资源。
实际应用场景:
- 远程服务器管理和操作。
- 通过 SSH 进行远程命令执行和系统管理。
# 2. 端口映射
在实际开发中,经常需要通过 SSH 将堡垒机保护的内网服务端口映射到本地,从而进行远程调试或访问内部服务。JschUtil
提供了便捷的端口映射方法。
# 端口映射(从远程映射到本地)
import cn.hutool.extra.ssh.JschUtil;
import com.jcraft.jsch.Session;
public class JschPortMappingExample {
public static void main(String[] args) {
// 建立与跳板机的 SSH 会话
Session session = JschUtil.getSession("10.1.1.1", 22, "test", "123456");
// 将跳板机保护的内网服务端口 8080 映射到本地主机的 8080 端口
JschUtil.bindPort(session, "172.20.12.123", 8080, 8080);
// 在这里可以通过 http://localhost:8080 访问远程服务器上的内网服务
// 关闭会话,释放资源
JschUtil.close(session);
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
代码解析:
JschUtil.bindPort(Session session, String remoteHost, int remotePort, int localPort)
:将远程主机的端口映射到本地。session
:已建立的 SSH 会话。remoteHost
:远程服务器的地址(即内网主机地址)。remotePort
:远程服务器上的服务端口。localPort
:本地映射的端口号。
适用场景:
- 通过本地访问内网中的服务,进行远程调试。
- 绕过防火墙或堡垒机访问受保护的服务器。
# 3. 常用方法
generateLocalPort
:生成一个本地端口(从 10001 开始,寻找一个未被占用的端口)。int localPort = JschUtil.generateLocalPort();
1unBindPort
:解除端口映射。JschUtil.unBindPort(session, localPort);
1openAndBindPortToLocal
:快速连接跳板机并映射远程端口到本地,简化操作流程。Session session = JschUtil.openAndBindPortToLocal("10.1.1.1", 22, "test", "123456", "172.20.12.123", 8080, 8080);
1
# 4. 实际开发中的应用场景
- 跨网络环境的远程调试:开发人员可以通过端口映射,将内网环境中的服务端口映射到本地,从而进行远程调试。
- 通过跳板机访问内网服务:在存在堡垒机或跳板机的网络环境中,可以通过 SSH 建立连接,并映射端口,从而访问内网服务。
- 安全的远程管理:通过 SSH 的方式进行远程管理,同时可以执行命令、上传下载文件等操作。
总结
JschUtil
是一个轻量级但功能强大的工具类,尤其适合在需要使用 SSH 进行远程管理、端口映射和数据传输的场景中。相比直接使用 JSch,JschUtil
提供了更简单的 API 和更好的使用体验,可以极大提高开发效率。