@ -106,26 +106,29 @@ public abstract class JschConfigSessionFactory extends SshSessionFactory {
if ( user = = null )
user = hc . getUser ( ) ;
final Session session = createSession ( hc , user , host , port , fs ) ;
if ( pass ! = null )
session . setPassword ( pass ) ;
final String strictHostKeyCheckingPolicy = hc
. getStrictHostKeyChecking ( ) ;
if ( strictHostKeyCheckingPolicy ! = null )
session . setConfig ( "StrictHostKeyChecking" ,
strictHostKeyCheckingPolicy ) ;
final String pauth = hc . getPreferredAuthentications ( ) ;
if ( pauth ! = null )
session . setConfig ( "PreferredAuthentications" , pauth ) ;
if ( credentialsProvider ! = null
& & ( ! hc . isBatchMode ( ) | | ! credentialsProvider . isInteractive ( ) ) ) {
session . setUserInfo ( new CredentialsProviderUserInfo ( session ,
credentialsProvider ) ) ;
}
configure ( hc , session ) ;
Session session = createSession ( credentialsProvider , fs , user ,
pass , host , port , hc ) ;
if ( ! session . isConnected ( ) )
session . connect ( tms ) ;
int retries = 0 ;
while ( ! session . isConnected ( ) & & retries < 3 ) {
try {
retries + + ;
session . connect ( tms ) ;
} catch ( JSchException e ) {
session . disconnect ( ) ;
session = null ;
// if authentication failed maybe credentials changed at the
// remote end therefore reset credentials and retry
if ( credentialsProvider ! = null & & e . getCause ( ) = = null
& & e . getMessage ( ) . equals ( "Auth fail" ) ) {
credentialsProvider . reset ( uri ) ;
session = createSession ( credentialsProvider , fs , user ,
pass , host , port , hc ) ;
} else {
throw e ;
}
}
}
return new JschSession ( session , uri ) ;
@ -140,9 +143,32 @@ public abstract class JschConfigSessionFactory extends SshSessionFactory {
}
private Session createSession ( CredentialsProvider credentialsProvider ,
FS fs , String user , final String pass , String host , int port ,
final OpenSshConfig . Host hc ) throws JSchException {
final Session session = createSession ( hc , user , host , port , fs ) ;
if ( pass ! = null )
session . setPassword ( pass ) ;
final String strictHostKeyCheckingPolicy = hc
. getStrictHostKeyChecking ( ) ;
if ( strictHostKeyCheckingPolicy ! = null )
session . setConfig ( "StrictHostKeyChecking" ,
strictHostKeyCheckingPolicy ) ;
final String pauth = hc . getPreferredAuthentications ( ) ;
if ( pauth ! = null )
session . setConfig ( "PreferredAuthentications" , pauth ) ;
if ( credentialsProvider ! = null
& & ( ! hc . isBatchMode ( ) | | ! credentialsProvider . isInteractive ( ) ) ) {
session . setUserInfo ( new CredentialsProviderUserInfo ( session ,
credentialsProvider ) ) ;
}
configure ( hc , session ) ;
return session ;
}
/ * *
* Create a new remote session for the requested address .
*
*
* @param hc
* host configuration
* @param user