|
|
|
@ -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 |
|
|
|
|