Class Session

java.lang.Object
com.jcraft.jsch.Session
All Implemented Interfaces:
Runnable

public class Session extends Object implements Runnable
  • Field Details

    • SSH_MSG_DISCONNECT

      static final int SSH_MSG_DISCONNECT
      See Also:
    • SSH_MSG_IGNORE

      static final int SSH_MSG_IGNORE
      See Also:
    • SSH_MSG_UNIMPLEMENTED

      static final int SSH_MSG_UNIMPLEMENTED
      See Also:
    • SSH_MSG_DEBUG

      static final int SSH_MSG_DEBUG
      See Also:
    • SSH_MSG_SERVICE_REQUEST

      static final int SSH_MSG_SERVICE_REQUEST
      See Also:
    • SSH_MSG_SERVICE_ACCEPT

      static final int SSH_MSG_SERVICE_ACCEPT
      See Also:
    • SSH_MSG_KEXINIT

      static final int SSH_MSG_KEXINIT
      See Also:
    • SSH_MSG_NEWKEYS

      static final int SSH_MSG_NEWKEYS
      See Also:
    • SSH_MSG_KEXDH_INIT

      static final int SSH_MSG_KEXDH_INIT
      See Also:
    • SSH_MSG_KEXDH_REPLY

      static final int SSH_MSG_KEXDH_REPLY
      See Also:
    • SSH_MSG_KEX_DH_GEX_GROUP

      static final int SSH_MSG_KEX_DH_GEX_GROUP
      See Also:
    • SSH_MSG_KEX_DH_GEX_INIT

      static final int SSH_MSG_KEX_DH_GEX_INIT
      See Also:
    • SSH_MSG_KEX_DH_GEX_REPLY

      static final int SSH_MSG_KEX_DH_GEX_REPLY
      See Also:
    • SSH_MSG_KEX_DH_GEX_REQUEST

      static final int SSH_MSG_KEX_DH_GEX_REQUEST
      See Also:
    • SSH_MSG_GLOBAL_REQUEST

      static final int SSH_MSG_GLOBAL_REQUEST
      See Also:
    • SSH_MSG_REQUEST_SUCCESS

      static final int SSH_MSG_REQUEST_SUCCESS
      See Also:
    • SSH_MSG_REQUEST_FAILURE

      static final int SSH_MSG_REQUEST_FAILURE
      See Also:
    • SSH_MSG_CHANNEL_OPEN

      static final int SSH_MSG_CHANNEL_OPEN
      See Also:
    • SSH_MSG_CHANNEL_OPEN_CONFIRMATION

      static final int SSH_MSG_CHANNEL_OPEN_CONFIRMATION
      See Also:
    • SSH_MSG_CHANNEL_OPEN_FAILURE

      static final int SSH_MSG_CHANNEL_OPEN_FAILURE
      See Also:
    • SSH_MSG_CHANNEL_WINDOW_ADJUST

      static final int SSH_MSG_CHANNEL_WINDOW_ADJUST
      See Also:
    • SSH_MSG_CHANNEL_DATA

      static final int SSH_MSG_CHANNEL_DATA
      See Also:
    • SSH_MSG_CHANNEL_EXTENDED_DATA

      static final int SSH_MSG_CHANNEL_EXTENDED_DATA
      See Also:
    • SSH_MSG_CHANNEL_EOF

      static final int SSH_MSG_CHANNEL_EOF
      See Also:
    • SSH_MSG_CHANNEL_CLOSE

      static final int SSH_MSG_CHANNEL_CLOSE
      See Also:
    • SSH_MSG_CHANNEL_REQUEST

      static final int SSH_MSG_CHANNEL_REQUEST
      See Also:
    • SSH_MSG_CHANNEL_SUCCESS

      static final int SSH_MSG_CHANNEL_SUCCESS
      See Also:
    • SSH_MSG_CHANNEL_FAILURE

      static final int SSH_MSG_CHANNEL_FAILURE
      See Also:
    • PACKET_MAX_SIZE

      private static final int PACKET_MAX_SIZE
      See Also:
    • V_S

      private byte[] V_S
    • V_C

      private byte[] V_C
    • I_C

      private byte[] I_C
    • I_S

      private byte[] I_S
    • K_S

      private byte[] K_S
    • session_id

      private byte[] session_id
    • IVc2s

      private byte[] IVc2s
    • IVs2c

      private byte[] IVs2c
    • Ec2s

      private byte[] Ec2s
    • Es2c

      private byte[] Es2c
    • MACc2s

      private byte[] MACc2s
    • MACs2c

      private byte[] MACs2c
    • seqi

      private int seqi
    • seqo

      private int seqo
    • guess

      String[] guess
    • s2ccipher

      private Cipher s2ccipher
    • c2scipher

      private Cipher c2scipher
    • s2cmac

      private MAC s2cmac
    • c2smac

      private MAC c2smac
    • s2cmac_result1

      private byte[] s2cmac_result1
    • s2cmac_result2

      private byte[] s2cmac_result2
    • deflater

      private Compression deflater
    • inflater

      private Compression inflater
    • io

      private IO io
    • socket

      private Socket socket
    • timeout

      private int timeout
    • isConnected

      private volatile boolean isConnected
    • isAuthed

      private boolean isAuthed
    • connectThread

      private Thread connectThread
    • lock

      private Object lock
    • x11_forwarding

      boolean x11_forwarding
    • agent_forwarding

      boolean agent_forwarding
    • in

    • out

    • random

      static Random random
    • buf

      Buffer buf
    • packet

      Packet packet
    • socket_factory

      SocketFactory socket_factory
    • buffer_margin

      static final int buffer_margin
      See Also:
    • config

      private Hashtable config
    • proxy

      private Proxy proxy
    • userinfo

      private UserInfo userinfo
    • hostKeyAlias

      private String hostKeyAlias
    • serverAliveInterval

      private int serverAliveInterval
    • serverAliveCountMax

      private int serverAliveCountMax
    • identityRepository

      private IdentityRepository identityRepository
    • hostkeyRepository

      private HostKeyRepository hostkeyRepository
    • daemon_thread

      protected boolean daemon_thread
    • kex_start_time

      private long kex_start_time
    • max_auth_tries

      int max_auth_tries
    • auth_failures

      int auth_failures
    • host

      String host
    • org_host

      String org_host
    • port

      int port
    • username

      String username
    • password

      byte[] password
    • jsch

      JSch jsch
    • in_kex

      private volatile boolean in_kex
    • in_prompt

      private volatile boolean in_prompt
    • uncompress_len

      int[] uncompress_len
    • compress_len

      int[] compress_len
    • s2ccipher_size

      private int s2ccipher_size
    • c2scipher_size

      private int c2scipher_size
    • thread

      Runnable thread
    • grr

    • keepalivemsg

      private static final byte[] keepalivemsg
    • nomoresessions

      private static final byte[] nomoresessions
    • hostkey

      private HostKey hostkey
  • Constructor Details

  • Method Details

    • connect

      public void connect() throws JSchException
      Throws:
      JSchException
    • connect

      public void connect(int connectTimeout) throws JSchException
      Throws:
      JSchException
    • receive_kexinit

      private KeyExchange receive_kexinit(Buffer buf) throws Exception
      Throws:
      Exception
    • rekey

      public void rekey() throws Exception
      Throws:
      Exception
    • send_kexinit

      private void send_kexinit() throws Exception
      Throws:
      Exception
    • send_newkeys

      private void send_newkeys() throws Exception
      Throws:
      Exception
    • checkHost

      private void checkHost(String chost, int port, KeyExchange kex) throws JSchException
      Throws:
      JSchException
    • openChannel

      public Channel openChannel(String type) throws JSchException
      Throws:
      JSchException
    • encode

      public void encode(Packet packet) throws Exception
      Throws:
      Exception
    • read

      public Buffer read(Buffer buf) throws Exception
      Throws:
      Exception
    • start_discard

      private void start_discard(Buffer buf, Cipher cipher, MAC mac, int packet_length, int discard) throws JSchException, IOException
      Throws:
      JSchException
      IOException
    • getSessionId

      byte[] getSessionId()
    • receive_newkeys

      private void receive_newkeys(Buffer buf, KeyExchange kex) throws Exception
      Throws:
      Exception
    • updateKeys

      private void updateKeys(KeyExchange kex) throws Exception
      Throws:
      Exception
    • expandKey

      private byte[] expandKey(Buffer buf, byte[] K, byte[] H, byte[] key, HASH hash, int required_length) throws Exception
      Throws:
      Exception
    • write

      void write(Packet packet, Channel c, int length) throws Exception
      Throws:
      Exception
    • write

      public void write(Packet packet) throws Exception
      Throws:
      Exception
    • _write

      private void _write(Packet packet) throws Exception
      Throws:
      Exception
    • run

      public void run()
      Specified by:
      run in interface Runnable
    • disconnect

      public void disconnect()
    • setPortForwardingL

      public int setPortForwardingL(int lport, String host, int rport) throws JSchException
      Registers the local port forwarding for loop-back interface. If lport is 0, the tcp port will be allocated.
      Parameters:
      lport - local port for local port forwarding
      host - host address for local port forwarding
      rport - remote port number for local port forwarding
      Returns:
      an allocated local TCP port number
      Throws:
      JSchException
      See Also:
    • setPortForwardingL

      public int setPortForwardingL(String bind_address, int lport, String host, int rport) throws JSchException
      Registers the local port forwarding. If bind_address is an empty string or '*', the port should be available from all interfaces. If bind_address is "localhost" or null, the listening port will be bound for local use only. If lport is 0, the tcp port will be allocated.
      Parameters:
      bind_address - bind address for local port forwarding
      lport - local port for local port forwarding
      host - host address for local port forwarding
      rport - remote port number for local port forwarding
      Returns:
      an allocated local TCP port number
      Throws:
      JSchException
      See Also:
    • setPortForwardingL

      public int setPortForwardingL(String bind_address, int lport, String host, int rport, ServerSocketFactory ssf) throws JSchException
      Registers the local port forwarding. If bind_address is an empty string or "*", the port should be available from all interfaces. If bind_address is "localhost" or null, the listening port will be bound for local use only. If lport is 0, the tcp port will be allocated.
      Parameters:
      bind_address - bind address for local port forwarding
      lport - local port for local port forwarding
      host - host address for local port forwarding
      rport - remote port number for local port forwarding
      ssf - socket factory
      Returns:
      an allocated local TCP port number
      Throws:
      JSchException
      See Also:
    • setPortForwardingL

      public int setPortForwardingL(String bind_address, int lport, String host, int rport, ServerSocketFactory ssf, int connectTimeout) throws JSchException
      Registers the local port forwarding. If bind_address is an empty string or "*", the port should be available from all interfaces. If bind_address is "localhost" or null, the listening port will be bound for local use only. If lport is 0, the tcp port will be allocated.
      Parameters:
      bind_address - bind address for local port forwarding
      lport - local port for local port forwarding
      host - host address for local port forwarding
      rport - remote port number for local port forwarding
      ssf - socket factory
      connectTimeout - timeout for establishing port connection
      Returns:
      an allocated local TCP port number
      Throws:
      JSchException
    • delPortForwardingL

      public void delPortForwardingL(int lport) throws JSchException
      Cancels the local port forwarding assigned at local TCP port lport on loopback interface.
      Parameters:
      lport - local TCP port
      Throws:
      JSchException
    • delPortForwardingL

      public void delPortForwardingL(String bind_address, int lport) throws JSchException
      Cancels the local port forwarding assigned at local TCP port lport on bind_address interface.
      Parameters:
      bind_address - bind_address of network interfaces
      lport - local TCP port
      Throws:
      JSchException
    • getPortForwardingL

      public String[] getPortForwardingL() throws JSchException
      Lists the registered local port forwarding.
      Returns:
      a list of "lport:host:hostport"
      Throws:
      JSchException
    • setPortForwardingR

      public void setPortForwardingR(int rport, String host, int lport) throws JSchException
      Registers the remote port forwarding for the loopback interface of the remote.
      Parameters:
      rport - remote port
      host - host address
      lport - local port
      Throws:
      JSchException
      See Also:
    • setPortForwardingR

      public void setPortForwardingR(String bind_address, int rport, String host, int lport) throws JSchException
      Registers the remote port forwarding. If bind_address is an empty string or "*", the port should be available from all interfaces. If bind_address is "localhost" or is not given, the listening port will be bound for local use only. Note that if GatewayPorts is "no" on the remote, "localhost" is always used as a bind_address.
      Parameters:
      bind_address - bind address
      rport - remote port
      host - host address
      lport - local port
      Throws:
      JSchException
      See Also:
    • setPortForwardingR

      public void setPortForwardingR(int rport, String host, int lport, SocketFactory sf) throws JSchException
      Registers the remote port forwarding for the loopback interface of the remote.
      Parameters:
      rport - remote port
      host - host address
      lport - local port
      sf - socket factory
      Throws:
      JSchException
      See Also:
    • setPortForwardingR

      public void setPortForwardingR(String bind_address, int rport, String host, int lport, SocketFactory sf) throws JSchException
      Registers the remote port forwarding. If bind_address is an empty string or "*", the port should be available from all interfaces. If bind_address is "localhost" or is not given, the listening port will be bound for local use only. Note that if GatewayPorts is "no" on the remote, "localhost" is always used as a bind_address. If rport is 0, the TCP port will be allocated on the remote.
      Parameters:
      bind_address - bind address
      rport - remote port
      host - host address
      lport - local port
      sf - socket factory
      Throws:
      JSchException
    • setPortForwardingR

      public void setPortForwardingR(int rport, String daemon) throws JSchException
      Registers the remote port forwarding for the loopback interface of the remote. The TCP connection to rport on the remote will be forwarded to an instance of the class daemon. The class specified by daemon must implement ForwardedTCPIPDaemon.
      Parameters:
      rport - remote port
      daemon - class name, which implements "ForwardedTCPIPDaemon"
      Throws:
      JSchException
      See Also:
    • setPortForwardingR

      public void setPortForwardingR(int rport, String daemon, Object[] arg) throws JSchException
      Registers the remote port forwarding for the loopback interface of the remote. The TCP connection to rport on the remote will be forwarded to an instance of the class daemon with the argument arg. The class specified by daemon must implement ForwardedTCPIPDaemon.
      Parameters:
      rport - remote port
      daemon - class name, which implements "ForwardedTCPIPDaemon"
      arg - arguments for "daemon"
      Throws:
      JSchException
      See Also:
    • setPortForwardingR

      public void setPortForwardingR(String bind_address, int rport, String daemon, Object[] arg) throws JSchException
      Registers the remote port forwarding. If bind_address is an empty string or "*", the port should be available from all interfaces. If bind_address is "localhost" or is not given, the listening port will be bound for local use only. Note that if GatewayPorts is "no" on the remote, "localhost" is always used as a bind_address. The TCP connection to rport on the remote will be forwarded to an instance of the class daemon with the argument arg. The class specified by daemon must implement ForwardedTCPIPDaemon.
      Parameters:
      bind_address - bind address
      rport - remote port
      daemon - class name, which implements "ForwardedTCPIPDaemon"
      arg - arguments for "daemon"
      Throws:
      JSchException
      See Also:
    • getPortForwardingR

      public String[] getPortForwardingR() throws JSchException
      Lists the registered remote port forwarding.
      Returns:
      a list of "rport:host:hostport"
      Throws:
      JSchException
    • parseForwarding

      private Session.Forwarding parseForwarding(String conf) throws JSchException
      The given argument may be "[bind_address:]port:host:hostport" or "[bind_address:]port host:hostport", which is from LocalForward command of ~/.ssh/config .
      Throws:
      JSchException
    • setPortForwardingL

      public int setPortForwardingL(String conf) throws JSchException
      Registers the local port forwarding. The argument should be in the format like "[bind_address:]port:host:hostport". If bind_address is an empty string or "*", the port should be available from all interfaces. If bind_address is "localhost" or is not given, the listening port will be bound for local use only.
      Parameters:
      conf - configuration of local port forwarding
      Returns:
      an assigned port number
      Throws:
      JSchException
      See Also:
    • setPortForwardingR

      public int setPortForwardingR(String conf) throws JSchException
      Registers the remote port forwarding. The argument should be in the format like "[bind_address:]port:host:hostport". If the bind_address is not given, the default is to only bind to loopback addresses. If the bind_address is "*" or an empty string, then the forwarding is requested to listen on all interfaces. Note that if GatewayPorts is "no" on the remote, "localhost" is always used for bind_address. If the specified remote is "0", the TCP port will be allocated on the remote.
      Parameters:
      conf - configuration of remote port forwarding
      Returns:
      an allocated TCP port on the remote.
      Throws:
      JSchException
      See Also:
    • getStreamForwarder

      public Channel getStreamForwarder(String host, int port) throws JSchException
      Instantiates an instance of stream-forwarder to host:port. Set I/O stream to the given channel, and then invoke Channel#connect() method.
      Parameters:
      host - remote host, which the given stream will be plugged to.
      port - remote port, which the given stream will be plugged to.
      Throws:
      JSchException
    • _setPortForwardingR

      private int _setPortForwardingR(String bind_address, int rport) throws JSchException
      Throws:
      JSchException
    • delPortForwardingR

      public void delPortForwardingR(int rport) throws JSchException
      Cancels the remote port forwarding assigned at remote TCP port rport.
      Parameters:
      rport - remote TCP port
      Throws:
      JSchException
    • delPortForwardingR

      public void delPortForwardingR(String bind_address, int rport) throws JSchException
      Cancels the remote port forwarding assigned at remote TCP port rport bound on the interface at bind_address.
      Parameters:
      bind_address - bind address of the interface on the remote
      rport - remote TCP port
      Throws:
      JSchException
    • initDeflater

      private void initDeflater(String method) throws JSchException
      Throws:
      JSchException
    • initInflater

      private void initInflater(String method) throws JSchException
      Throws:
      JSchException
    • addChannel

      void addChannel(Channel channel)
    • setProxy

      public void setProxy(Proxy proxy)
    • setHost

      public void setHost(String host)
    • setPort

      public void setPort(int port)
    • setUserName

      void setUserName(String username)
    • setUserInfo

      public void setUserInfo(UserInfo userinfo)
    • getUserInfo

      public UserInfo getUserInfo()
    • setInputStream

      public void setInputStream(InputStream in)
    • setOutputStream

      public void setOutputStream(OutputStream out)
    • setX11Host

      public void setX11Host(String host)
    • setX11Port

      public void setX11Port(int port)
    • setX11Cookie

      public void setX11Cookie(String cookie)
    • setPassword

      public void setPassword(String password)
    • setPassword

      public void setPassword(byte[] password)
    • setConfig

      public void setConfig(Properties newconf)
    • setConfig

      public void setConfig(Hashtable newconf)
    • setConfig

      public void setConfig(String key, String value)
    • getConfig

      public String getConfig(String key)
    • setSocketFactory

      public void setSocketFactory(SocketFactory sfactory)
    • isConnected

      public boolean isConnected()
    • getTimeout

      public int getTimeout()
    • setTimeout

      public void setTimeout(int timeout) throws JSchException
      Throws:
      JSchException
    • getServerVersion

      public String getServerVersion()
    • getClientVersion

      public String getClientVersion()
    • setClientVersion

      public void setClientVersion(String cv)
    • sendIgnore

      public void sendIgnore() throws Exception
      Throws:
      Exception
    • sendKeepAliveMsg

      public void sendKeepAliveMsg() throws Exception
      Throws:
      Exception
    • noMoreSessionChannels

      public void noMoreSessionChannels() throws Exception
      Throws:
      Exception
    • getHostKey

      public HostKey getHostKey()
    • getHost

      public String getHost()
    • getUserName

      public String getUserName()
    • getPort

      public int getPort()
    • setHostKeyAlias

      public void setHostKeyAlias(String hostKeyAlias)
    • getHostKeyAlias

      public String getHostKeyAlias()
    • setServerAliveInterval

      public void setServerAliveInterval(int interval) throws JSchException
      Sets the interval to send a keep-alive message. If zero is specified, any keep-alive message must not be sent. The default interval is zero.
      Parameters:
      interval - the specified interval, in milliseconds.
      Throws:
      JSchException
      See Also:
    • getServerAliveInterval

      public int getServerAliveInterval()
      Returns setting for the interval to send a keep-alive message.
      See Also:
    • setServerAliveCountMax

      public void setServerAliveCountMax(int count)
      Sets the number of keep-alive messages which may be sent without receiving any messages back from the server. If this threshold is reached while keep-alive messages are being sent, the connection will be disconnected. The default value is one.
      Parameters:
      count - the specified count
      See Also:
    • getServerAliveCountMax

      public int getServerAliveCountMax()
      Returns setting for the threshold to send keep-alive messages.
      See Also:
    • setDaemonThread

      public void setDaemonThread(boolean enable)
    • checkCiphers

      private String[] checkCiphers(String ciphers)
    • checkCipher

      static boolean checkCipher(String cipher)
    • checkKexes

      private String[] checkKexes(String kexes)
    • checkKex

      static boolean checkKex(Session s, String kex)
    • checkSignatures

      private String[] checkSignatures(String sigs)
    • setIdentityRepository

      public void setIdentityRepository(IdentityRepository identityRepository)
      Sets the identityRepository, which will be referred in the public key authentication. The default value is null.
      Parameters:
      identityRepository -
      See Also:
    • getIdentityRepository

      IdentityRepository getIdentityRepository()
      Gets the identityRepository. If this.identityRepository is null, JSch#getIdentityRepository() will be invoked.
      See Also:
    • setHostKeyRepository

      public void setHostKeyRepository(HostKeyRepository hostkeyRepository)
      Sets the hostkeyRepository, which will be referred in checking host keys.
      Parameters:
      hostkeyRepository -
      See Also:
    • getHostKeyRepository

      public HostKeyRepository getHostKeyRepository()
      Gets the hostkeyRepository. If this.hostkeyRepository is null, JSch#getHostKeyRepository() will be invoked.
      See Also:
    • applyConfig

      private void applyConfig() throws JSchException
      Throws:
      JSchException
    • applyConfigChannel

      private void applyConfigChannel(ChannelSession channel) throws JSchException
      Throws:
      JSchException
    • requestPortForwarding

      private void requestPortForwarding() throws JSchException
      Throws:
      JSchException
    • checkConfig

      private void checkConfig(ConfigRepository.Config config, String key)