Class JschConfigSessionFactory

java.lang.Object
org.eclipse.jgit.transport.SshSessionFactory
org.eclipse.jgit.transport.JschConfigSessionFactory

public class JschConfigSessionFactory extends SshSessionFactory
The base session factory that loads known hosts and private keys from $HOME/.ssh.

This is the default implementation used by JGit and provides most of the compatibility necessary to match OpenSSH, a popular implementation of SSH used by C Git.

The factory does not provide UI behavior. Override the method configure(org.eclipse.jgit.transport.OpenSshConfig.Host, Session) to supply appropriate UserInfo to the session.

  • Field Details

    • JSCH

      private static final String JSCH
      See Also:
    • LOG

      private static final org.slf4j.Logger LOG
    • byIdentityFile

      private final Map<String,com.jcraft.jsch.JSch> byIdentityFile
      We use different Jsch instances for hosts that have an IdentityFile configured in ~/.ssh/config. Jsch by default would cache decrypted keys only per session, which results in repeated password prompts. Using different Jsch instances, we can cache the keys on these instances so that they will be re-used for successive sessions, and thus the user is prompted for a key password only once while Eclipse runs.
    • defaultJSch

      private com.jcraft.jsch.JSch defaultJSch
    • config

      private OpenSshConfig config
  • Constructor Details

    • JschConfigSessionFactory

      public JschConfigSessionFactory()
  • Method Details

    • getSession

      public RemoteSession getSession(URIish uri, CredentialsProvider credentialsProvider, FS fs, int tms) throws TransportException
      Opens (or reuses) a session to a host. The returned session is connected and authenticated and is ready for further use.
      Specified by:
      getSession in class SshSessionFactory
      Parameters:
      uri - URI of the remote host to connect to
      credentialsProvider - provider to support authentication, may be null if no user input for authentication is needed
      fs - the file system abstraction to use for certain file operations, such as reading configuration files
      tms - connection timeout for creating the session, in milliseconds
      Returns:
      a connected and authenticated session for communicating with the remote host given by the uri
      Throws:
      TransportException - if the session could not be created
    • getType

      public String getType()
      Description copied from class: SshSessionFactory
      The name of the type of session factory.
      Specified by:
      getType in class SshSessionFactory
      Returns:
      the name of the type of session factory.
    • isAuthenticationFailed

      private static boolean isAuthenticationFailed(com.jcraft.jsch.JSchException e)
    • isAuthenticationCanceled

      private static boolean isAuthenticationCanceled(com.jcraft.jsch.JSchException e)
    • createSession

      com.jcraft.jsch.Session createSession(CredentialsProvider credentialsProvider, FS fs, String user, String pass, String host, int port, OpenSshConfig.Host hc) throws com.jcraft.jsch.JSchException
      Throws:
      com.jcraft.jsch.JSchException
    • safeConfig

      private void safeConfig(com.jcraft.jsch.Session session, com.jcraft.jsch.ConfigRepository.Config cfg)
    • setPreferredKeyTypesOrder

      private static void setPreferredKeyTypesOrder(com.jcraft.jsch.Session session)
    • hostName

      private static String hostName(com.jcraft.jsch.Session s)
    • copyConfigValueToSession

      private void copyConfigValueToSession(com.jcraft.jsch.Session session, com.jcraft.jsch.ConfigRepository.Config cfg, String from, String to)
    • setUserName

      private void setUserName(com.jcraft.jsch.Session session, String userName)
    • createSession

      protected com.jcraft.jsch.Session createSession(OpenSshConfig.Host hc, String user, String host, int port, FS fs) throws com.jcraft.jsch.JSchException
      Create a new remote session for the requested address.
      Parameters:
      hc - host configuration
      user - login to authenticate as.
      host - server name to connect to.
      port - port number of the SSH daemon (typically 22).
      fs - the file system abstraction which will be necessary to perform certain file system operations.
      Returns:
      new session instance, but otherwise unconfigured.
      Throws:
      com.jcraft.jsch.JSchException - the session could not be created.
    • configureJSch

      protected void configureJSch(com.jcraft.jsch.JSch jsch)
      Provide additional configuration for the JSch instance. This method could be overridden to supply a preferred IdentityRepository.
      Parameters:
      jsch - jsch instance
      Since:
      4.5
    • configure

      protected void configure(OpenSshConfig.Host hc, com.jcraft.jsch.Session session)
      Provide additional configuration for the session based on the host information. This method could be used to supply UserInfo.
      Parameters:
      hc - host configuration
      session - session to configure
    • getJSch

      protected com.jcraft.jsch.JSch getJSch(OpenSshConfig.Host hc, FS fs) throws com.jcraft.jsch.JSchException
      Obtain the JSch used to create new sessions.
      Parameters:
      hc - host configuration
      fs - the file system abstraction which will be necessary to perform certain file system operations.
      Returns:
      the JSch instance to use.
      Throws:
      com.jcraft.jsch.JSchException - the user configuration could not be created.
    • createDefaultJSch

      protected com.jcraft.jsch.JSch createDefaultJSch(FS fs) throws com.jcraft.jsch.JSchException
      Create default instance of jsch
      Parameters:
      fs - the file system abstraction which will be necessary to perform certain file system operations.
      Returns:
      the new default JSch implementation.
      Throws:
      com.jcraft.jsch.JSchException - known host keys cannot be loaded.
    • knownHosts

      private static void knownHosts(com.jcraft.jsch.JSch sch, FS fs) throws com.jcraft.jsch.JSchException
      Throws:
      com.jcraft.jsch.JSchException
    • identities

      private static void identities(com.jcraft.jsch.JSch sch, FS fs)
    • loadIdentity

      private static void loadIdentity(com.jcraft.jsch.JSch sch, File priv)
    • setConfig

      void setConfig(OpenSshConfig config)
      Set the OpenSshConfig to use. Intended for use in tests.
      Parameters:
      config - to use