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
        Open (or reuse) a session to a host.

        A reasonable UserInfo that can interact with the end-user (if necessary) is installed on the returned session by this method.

        The caller must connect the session by invoking connect() if it has not already been connected.

        Specified by:
        getSession in class SshSessionFactory
        Parameters:
        uri - URI information about the remote host
        credentialsProvider - provider to support authentication, may be null.
        fs - the file system abstraction which will be necessary to perform certain file system operations.
        tms - Timeout value, in milliseconds.
        Returns:
        a session that can contact the remote host.
        Throws:
        TransportException - 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