Package org.aoju.bus.extra.ssh
Class JSchKit
java.lang.Object
org.aoju.bus.extra.ssh.JSchKit
SSH2工具类
它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等
- Since:
- Java 17+
- Author:
- Kimi Liu
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic boolean绑定ssh服务端的serverPort端口, 到host主机的port端口上static boolean绑定端口到本地 一个会话可绑定多个端口static booleanbindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, String localHost, int localPort) 绑定端口到本地。 一个会话可绑定多个端口static voidclose(com.jcraft.jsch.Channel channel) 关闭会话通道static voidclose(com.jcraft.jsch.Session session) 关闭SSH连接会话static void关闭SSH连接会话static voidcloseAll()关闭所有SSH连接会话static com.jcraft.jsch.ChannelcreateChannel(com.jcraft.jsch.Session session, ChannelType channelType) 创建Channel连接static com.jcraft.jsch.SessioncreateSession(com.jcraft.jsch.JSch jsch, String sshHost, int sshPort, String sshUser) 创建一个SSH会话,重用已经使用的会话static com.jcraft.jsch.SessioncreateSession(String sshHost, int sshPort, String sshUser, String sshPass) 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)static com.jcraft.jsch.SessioncreateSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)static SftpcreateSftp(com.jcraft.jsch.Session session) 创建Sftpstatic SftpcreateSftp(String sshHost, int sshPort, String sshUser, String sshPass) 创建Sftpstatic String执行Shell命令(使用EXEC方式)static Stringexec(com.jcraft.jsch.Session session, String cmd, Charset charset, OutputStream errStream) 执行Shell命令 此方法单次发送一个命令到服务端,不读取环境变量,执行结束后自动关闭channel,不会产生阻塞static StringexecByShell(com.jcraft.jsch.Session session, String cmd, Charset charset) 执行Shell命令 此方法单次发送一个命令到服务端,自动读取环境变量,执行结束后自动关闭channel,不会产生阻塞static int生成一个本地端口,用于远程端口映射static com.jcraft.jsch.SessiongetSession(String sshHost, int sshPort, String sshUser, String sshPass) 获得一个SSH会话,重用已经使用的会话static com.jcraft.jsch.SessiongetSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 获得一个SSH会话,重用已经使用的会话static intopenAndBindPortToLocal(Connector sshConn, String remoteHost, int remotePort) 打开SSH会话,并绑定远程端口到本地的一个随机端口static com.jcraft.jsch.ChannelopenChannel(com.jcraft.jsch.Session session, ChannelType channelType) 打开Channel连接static com.jcraft.jsch.ChannelopenChannel(com.jcraft.jsch.Session session, ChannelType channelType, int timeout) 打开Channel连接static com.jcraft.jsch.SessionopenSession(String sshHost, int sshPort, String sshUser, String sshPass) 打开一个新的SSH会话static com.jcraft.jsch.SessionopenSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 打开一个新的SSH会话static com.jcraft.jsch.SessionopenSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase, int timeOut) 打开一个新的SSH会话static com.jcraft.jsch.SessionopenSession(String sshHost, int sshPort, String sshUser, String sshPass, int timeout) 打开一个新的SSH会话static com.jcraft.jsch.ChannelSftpopenSftp(com.jcraft.jsch.Session session) 打开SFTP连接static com.jcraft.jsch.ChannelSftpopenSftp(com.jcraft.jsch.Session session, int timeout) 打开SFTP连接static com.jcraft.jsch.ChannelShellopenShell(com.jcraft.jsch.Session session) 打开Shell连接static booleanunBindPort(com.jcraft.jsch.Session session, int localPort) 解除端口映射
-
Field Details
-
SSH_NONE
不使用SSH的值- See Also:
-
-
Constructor Details
-
JSchKit
public JSchKit()
-
-
Method Details
-
generateLocalPort
public static int generateLocalPort()生成一个本地端口,用于远程端口映射- Returns:
- 未被使用的本地端口
-
getSession
public static com.jcraft.jsch.Session getSession(String sshHost, int sshPort, String sshUser, String sshPass) 获得一个SSH会话,重用已经使用的会话- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名sshPass- 密码- Returns:
- SSH会话
-
getSession
public static com.jcraft.jsch.Session getSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 获得一个SSH会话,重用已经使用的会话- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名privateKeyPath- 私钥路径passphrase- 私钥密码- Returns:
- SSH会话
-
openSession
public static com.jcraft.jsch.Session openSession(String sshHost, int sshPort, String sshUser, String sshPass) 打开一个新的SSH会话- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名sshPass- 密码- Returns:
- SSH会话
-
openSession
public static com.jcraft.jsch.Session openSession(String sshHost, int sshPort, String sshUser, String sshPass, int timeout) 打开一个新的SSH会话- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名sshPass- 密码timeout- Socket连接超时时长,单位毫秒- Returns:
- SSH会话
-
openSession
public static com.jcraft.jsch.Session openSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 打开一个新的SSH会话- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名privateKeyPath- 私钥的路径passphrase- 私钥文件的密码,可以为null- Returns:
- SSH会话
-
openSession
public static com.jcraft.jsch.Session openSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase, int timeOut) 打开一个新的SSH会话- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名privateKeyPath- 私钥的路径passphrase- 私钥文件的密码,可以为nulltimeOut- 超时时间,单位毫秒- Returns:
- SSH会话
-
createSession
public static com.jcraft.jsch.Session createSession(String sshHost, int sshPort, String sshUser, String sshPass) 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名,如果为null,默认rootsshPass- 密码- Returns:
- SSH会话
-
createSession
public static com.jcraft.jsch.Session createSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase) 新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)- Parameters:
sshHost- 主机sshPort- 端口sshUser- 用户名,如果为null,默认rootprivateKeyPath- 私钥的路径passphrase- 私钥文件的密码,可以为null- Returns:
- SSH会话
-
createSession
public static com.jcraft.jsch.Session createSession(com.jcraft.jsch.JSch jsch, String sshHost, int sshPort, String sshUser) 创建一个SSH会话,重用已经使用的会话- Parameters:
jsch-JSchsshHost- 主机sshPort- 端口sshUser- 用户名,如果为null,默认root- Returns:
Session
-
bindPort
public static boolean bindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, int localPort) throws org.aoju.bus.core.exception.InternalException 绑定端口到本地 一个会话可绑定多个端口- Parameters:
session- 需要绑定端口的SSH会话remoteHost- 远程主机remotePort- 远程端口localPort- 本地端口- Returns:
- 成功与否
- Throws:
org.aoju.bus.core.exception.InternalException- 端口绑定失败异常
-
bindPort
public static boolean bindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, String localHost, int localPort) throws org.aoju.bus.core.exception.InternalException 绑定端口到本地。 一个会话可绑定多个端口- Parameters:
session- 需要绑定端口的SSH会话remoteHost- 远程主机remotePort- 远程端口localHost- 本地主机localPort- 本地端口- Returns:
- 成功与否
- Throws:
org.aoju.bus.core.exception.InternalException- 端口绑定失败异常
-
bindPort
public static boolean bindPort(com.jcraft.jsch.Session session, int bindPort, String host, int port) throws org.aoju.bus.core.exception.InternalException 绑定ssh服务端的serverPort端口, 到host主机的port端口上- Parameters:
session- 与ssh服务端建立的会话bindPort- ssh服务端上要被绑定的端口host- 转发到的hostport- host上的端口- Returns:
- 成功与否
- Throws:
org.aoju.bus.core.exception.InternalException- 端口绑定失败异常
-
unBindPort
public static boolean unBindPort(com.jcraft.jsch.Session session, int localPort) 解除端口映射- Parameters:
session- 需要解除端口映射的SSH会话localPort- 需要解除的本地端口- Returns:
- 解除成功与否
-
openAndBindPortToLocal
public static int openAndBindPortToLocal(Connector sshConn, String remoteHost, int remotePort) throws org.aoju.bus.core.exception.InternalException 打开SSH会话,并绑定远程端口到本地的一个随机端口- Parameters:
sshConn- SSH连接信息对象remoteHost- 远程主机remotePort- 远程端口- Returns:
- 映射后的本地端口
- Throws:
org.aoju.bus.core.exception.InternalException- 连接异常
-
openSftp
public static com.jcraft.jsch.ChannelSftp openSftp(com.jcraft.jsch.Session session) 打开SFTP连接- Parameters:
session- Session会话- Returns:
ChannelSftp
-
openSftp
public static com.jcraft.jsch.ChannelSftp openSftp(com.jcraft.jsch.Session session, int timeout) 打开SFTP连接- Parameters:
session- Session会话timeout- 连接超时时长,单位毫秒- Returns:
ChannelSftp
-
openShell
public static com.jcraft.jsch.ChannelShell openShell(com.jcraft.jsch.Session session) 打开Shell连接- Parameters:
session- Session会话- Returns:
ChannelShell
-
openChannel
public static com.jcraft.jsch.Channel openChannel(com.jcraft.jsch.Session session, ChannelType channelType) 打开Channel连接- Parameters:
session- Session会话channelType- 通道类型,可以是shell或sftp等,见ChannelType- Returns:
Channel
-
openChannel
public static com.jcraft.jsch.Channel openChannel(com.jcraft.jsch.Session session, ChannelType channelType, int timeout) 打开Channel连接- Parameters:
session- Session会话channelType- 通道类型,可以是shell或sftp等,见ChannelTypetimeout- 连接超时时长,单位毫秒- Returns:
Channel
-
createSftp
创建Sftp- Parameters:
sshHost- 远程主机sshPort- 远程主机端口sshUser- 远程主机用户名sshPass- 远程主机密码- Returns:
Sftp
-
createSftp
创建Sftp- Parameters:
session- SSH会话- Returns:
Sftp
-
createChannel
public static com.jcraft.jsch.Channel createChannel(com.jcraft.jsch.Session session, ChannelType channelType) 创建Channel连接- Parameters:
session- Session会话channelType- 通道类型,可以是shell或sftp等,见ChannelType- Returns:
Channel
-
exec
执行Shell命令(使用EXEC方式)- Parameters:
session- Session会话cmd- 命令charset- 发送和读取内容的编码- Returns:
ChannelExec
-
exec
public static String exec(com.jcraft.jsch.Session session, String cmd, Charset charset, OutputStream errStream) 执行Shell命令 此方法单次发送一个命令到服务端,不读取环境变量,执行结束后自动关闭channel,不会产生阻塞- Parameters:
session- Session会话cmd- 命令charset- 发送和读取内容的编码errStream- 错误信息输出到的位置- Returns:
- 执行结果内容
-
execByShell
执行Shell命令 此方法单次发送一个命令到服务端,自动读取环境变量,执行结束后自动关闭channel,不会产生阻塞- Parameters:
session- Session会话cmd- 命令charset- 发送和读取内容的编码- Returns:
ChannelExec
-
close
public static void close(com.jcraft.jsch.Session session) 关闭SSH连接会话- Parameters:
session- SSH会话
-
close
public static void close(com.jcraft.jsch.Channel channel) 关闭会话通道- Parameters:
channel- 会话通道
-
close
关闭SSH连接会话- Parameters:
key- 主机,格式为user@host:port
-
closeAll
public static void closeAll()关闭所有SSH连接会话
-