Class 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 Detail

      • LOG

        private static final org.slf4j.Logger LOG
      • byIdentityFile

        private final java.util.Map<java.lang.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
    • Constructor Detail

      • JschConfigSessionFactory

        public JschConfigSessionFactory()
    • Method Detail

      • 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 java.lang.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,
                                              java.lang.String user,
                                              java.lang.String pass,
                                              java.lang.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 java.lang.String hostName​(com.jcraft.jsch.Session s)
      • copyConfigValueToSession

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

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

        protected com.jcraft.jsch.Session createSession​(OpenSshConfig.Host hc,
                                                        java.lang.String user,
                                                        java.lang.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,
                                         java.io.File priv)
      • setConfig

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