authenticationCanceled=Authentication canceled: no password
closeListenerFailed=Ssh session close listener failed
configInvalidPath=Invalid path in ssh config key {0}: {1}
+configInvalidPositive=Ssh config entry {0} must be a strictly positive number but is ''{1}''
ftpCloseFailed=Closing the SFTP channel failed
gssapiFailure=GSS-API error for mechanism OID {0}
gssapiInitFailure=GSS-API initialization failure for mechanism {0}
package org.eclipse.jgit.internal.transport.sshd;
import static java.text.MessageFormat.format;
+import static org.eclipse.jgit.internal.transport.ssh.OpenSshConfigFile.positive;
import java.io.IOException;
import java.net.InetSocketAddress;
if (session.getCredentialsProvider() == null) {
session.setCredentialsProvider(getCredentialsProvider());
}
+ int numberOfPasswordPrompts = getNumberOfPasswordPrompts(hostConfig);
+ session.getProperties().put(PASSWORD_PROMPTS,
+ Integer.valueOf(numberOfPasswordPrompts));
FileKeyPairProvider ourConfiguredKeysProvider = null;
List<Path> identities = hostConfig.getIdentities().stream()
.map(s -> {
return session;
}
+ private int getNumberOfPasswordPrompts(HostConfigEntry hostConfig) {
+ String prompts = hostConfig
+ .getProperty(SshConstants.NUMBER_OF_PASSWORD_PROMPTS);
+ if (prompts != null) {
+ prompts = prompts.trim();
+ int value = positive(prompts);
+ if (value > 0) {
+ return value;
+ }
+ log.warn(format(SshdText.get().configInvalidPositive,
+ SshConstants.NUMBER_OF_PASSWORD_PROMPTS, prompts));
+ }
+ // Default for NumberOfPasswordPrompts according to
+ // https://man.openbsd.org/ssh_config
+ return 3;
+ }
+
/**
* Set a cache for loaded keys. Newly discovered keys will be added when
* IdentityFile host entries from the ssh config file are used during
/***/ public String authenticationCanceled;
/***/ public String closeListenerFailed;
/***/ public String configInvalidPath;
+ /***/ public String configInvalidPositive;
/***/ public String ftpCloseFailed;
/***/ public String gssapiFailure;
/***/ public String gssapiInitFailure;