Class JSchKit

java.lang.Object
org.aoju.bus.extra.ssh.JSchKit

public class JSchKit extends Object
SSH2工具类 它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等
Since:
Java 17+
Author:
Kimi Liu
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    static final String
    不使用SSH的值
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    bindPort(com.jcraft.jsch.Session session, int bindPort, String host, int port)
    绑定ssh服务端的serverPort端口, 到host主机的port端口上
    static boolean
    bindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, int localPort)
    绑定端口到本地 一个会话可绑定多个端口
    static boolean
    bindPort(com.jcraft.jsch.Session session, String remoteHost, int remotePort, String localHost, int localPort)
    绑定端口到本地。 一个会话可绑定多个端口
    static void
    close(com.jcraft.jsch.Channel channel)
    关闭会话通道
    static void
    close(com.jcraft.jsch.Session session)
    关闭SSH连接会话
    static void
    关闭SSH连接会话
    static void
    关闭所有SSH连接会话
    static com.jcraft.jsch.Channel
    createChannel(com.jcraft.jsch.Session session, ChannelType channelType)
    创建Channel连接
    static com.jcraft.jsch.Session
    createSession(com.jcraft.jsch.JSch jsch, String sshHost, int sshPort, String sshUser)
    创建一个SSH会话,重用已经使用的会话
    static com.jcraft.jsch.Session
    createSession(String sshHost, int sshPort, String sshUser, String sshPass)
    新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)
    static com.jcraft.jsch.Session
    createSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase)
    新建一个新的SSH会话,此方法并不打开会话(既不调用connect方法)
    static Sftp
    createSftp(com.jcraft.jsch.Session session)
    创建Sftp
    static Sftp
    createSftp(String sshHost, int sshPort, String sshUser, String sshPass)
    创建Sftp
    static String
    exec(com.jcraft.jsch.Session session, String cmd, Charset charset)
    执行Shell命令(使用EXEC方式)
    static String
    exec(com.jcraft.jsch.Session session, String cmd, Charset charset, OutputStream errStream)
    执行Shell命令 此方法单次发送一个命令到服务端,不读取环境变量,执行结束后自动关闭channel,不会产生阻塞
    static String
    execByShell(com.jcraft.jsch.Session session, String cmd, Charset charset)
    执行Shell命令 此方法单次发送一个命令到服务端,自动读取环境变量,执行结束后自动关闭channel,不会产生阻塞
    static int
    生成一个本地端口,用于远程端口映射
    static com.jcraft.jsch.Session
    getSession(String sshHost, int sshPort, String sshUser, String sshPass)
    获得一个SSH会话,重用已经使用的会话
    static com.jcraft.jsch.Session
    getSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase)
    获得一个SSH会话,重用已经使用的会话
    static int
    openAndBindPortToLocal(Connector sshConn, String remoteHost, int remotePort)
    打开SSH会话,并绑定远程端口到本地的一个随机端口
    static com.jcraft.jsch.Channel
    openChannel(com.jcraft.jsch.Session session, ChannelType channelType)
    打开Channel连接
    static com.jcraft.jsch.Channel
    openChannel(com.jcraft.jsch.Session session, ChannelType channelType, int timeout)
    打开Channel连接
    static com.jcraft.jsch.Session
    openSession(String sshHost, int sshPort, String sshUser, String sshPass)
    打开一个新的SSH会话
    static com.jcraft.jsch.Session
    openSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase)
    打开一个新的SSH会话
    static com.jcraft.jsch.Session
    openSession(String sshHost, int sshPort, String sshUser, String privateKeyPath, byte[] passphrase, int timeOut)
    打开一个新的SSH会话
    static com.jcraft.jsch.Session
    openSession(String sshHost, int sshPort, String sshUser, String sshPass, int timeout)
    打开一个新的SSH会话
    static com.jcraft.jsch.ChannelSftp
    openSftp(com.jcraft.jsch.Session session)
    打开SFTP连接
    static com.jcraft.jsch.ChannelSftp
    openSftp(com.jcraft.jsch.Session session, int timeout)
    打开SFTP连接
    static com.jcraft.jsch.ChannelShell
    openShell(com.jcraft.jsch.Session session)
    打开Shell连接
    static boolean
    unBindPort(com.jcraft.jsch.Session session, int localPort)
    解除端口映射

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

  • 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 - 私钥文件的密码,可以为null
      timeOut - 超时时间,单位毫秒
      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,默认root
      sshPass - 密码
      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,默认root
      privateKeyPath - 私钥的路径
      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 - JSch
      sshHost - 主机
      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 - 转发到的host
      port - 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等,见ChannelType
      timeout - 连接超时时长,单位毫秒
      Returns:
      Channel
    • createSftp

      public static Sftp createSftp(String sshHost, int sshPort, String sshUser, String sshPass)
      创建Sftp
      Parameters:
      sshHost - 远程主机
      sshPort - 远程主机端口
      sshUser - 远程主机用户名
      sshPass - 远程主机密码
      Returns:
      Sftp
    • createSftp

      public static Sftp createSftp(com.jcraft.jsch.Session session)
      创建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

      public static String exec(com.jcraft.jsch.Session session, String cmd, Charset charset)
      执行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

      public static String execByShell(com.jcraft.jsch.Session session, String cmd, Charset charset)
      执行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

      public static void close(String key)
      关闭SSH连接会话
      Parameters:
      key - 主机,格式为user@host:port
    • closeAll

      public static void closeAll()
      关闭所有SSH连接会话