Установка предпочтительного метода аутентификации в Spring SFTP

Я пытаюсь создать SFTP-соединение через Spring Boot. Я использую аутентификацию по паролю, а не PrivateKey. Когда я запускаю свое приложение, оно сначала пытается пройти аутентификацию через gssapi-with-mic, а Kerberos запрашивает учетные данные. После того, как я нажму клавишу через Kerberos, приложение попытается найти закрытый ключ. Не найдя никаких сведений о ключе, он, наконец, попытается ввести учетные данные, предоставленные фабрике сеансов, и будет работать, как предполагалось. Поскольку это приложение будет жить в сборке Docker, мне нужно, чтобы оно сначала попыталось пройти аутентификацию по паролю.

На данный момент я попытался установить свойства сеанса, установив для параметра AllowUnkownKeys значение false и полностью удалив его, но безуспешно.

@SpringBootApplication
public class SFTPConnector {


public static void main(String[] args){
    new SpringApplicationBuilder(SFTPConnector.class).run(args);
}

@Bean
Properties configProperties(){
    Properties config = new Properties();
    config.setProperty("PreferredAuthenticationMethod", "PASSWORD");
    return config;
}

@Bean(name = PollerMetadata.DEFAULT_POLLER)
public PollerMetadata defaultPoller(){
    System.out.println("Initializing Poller");
    PollerMetadata pollerMetadata = new PollerMetadata();
    pollerMetadata.setTrigger(new PeriodicTrigger(6000));
    return pollerMetadata;
}
@Bean
SessionFactory<ChannelSftp.LsEntry> sftpSessionFactory(){
    System.out.println("Creating Session");
    DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory();
    factory.setHost("someSFTPServer");
    factory.setUser("user");
    factory.setPassword("SomePassword");
    factory.setPort(22);
    factory.setAllowUnknownKeys(true);
    factory.setSessionConfig(configProperties());
    return new CachingSessionFactory<ChannelSftp.LsEntry>(factory);
}
@Bean
SftpInboundFileSynchronizer sftpInboundFileSynchronizer(){
    System.out.println("In File Synchronizer");
    SftpInboundFileSynchronizer fileSync = new SftpInboundFileSynchronizer(sftpSessionFactory());
    fileSync.setDeleteRemoteFiles(false);
    fileSync.setRemoteDirectory("SomeDir");
    fileSync.setFilter(new SftpSimplePatternFileListFilter("*.csv"));
    return fileSync;
}
@Bean
@InboundChannelAdapter("sftpChannel")
public MessageSource<File> sftpMessageSource(){
    System.out.println("Inside SFTP Message Source");
    SftpInboundFileSynchronizingMessageSource source = new SftpInboundFileSynchronizingMessageSource(sftpInboundFileSynchronizer());
    source.setLocalDirectory(new File("/tmp/local_inbound"));
    source.setAutoCreateLocalDirectory(true);
    source.setLocalFilter(new AcceptOnceFileListFilter<File>());
    return source;
}
@Bean
@ServiceActivator(inputChannel = "sftpChannel")
MessageHandler messageHandler(){
    System.out.println("Inisde Message Handler");
    return new MessageHandler() {
        @Override
        public void handleMessage(Message<?> arg0) throws MessagingException {
                File f = (File) arg0.getPayload();
                System.out.println(f.getName());
        }
    };
}

}`

Я получаю: 019-01-04 11:22:30.938 ИНФОРМАЦИЯ 11240 --- [ask-scheduler-1] com.jcraft.jsch : SSH_MSG_NEWKEYS отправлено 04-01-2019 11:22:30.938 ИНФОРМАЦИЯ 11240 --- [ask-scheduler-1]. 11:22:30.948 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch : SSH_MSG_SERVICE_ACCEPT получено 04.01.2019 11:22:30.952 INFO 11240 --- [ask-scheduler-1] com.jcraft .jsch : Аутентификации, которые могут продолжаться: gssapi-with-mic,publickey,keyboard-interactive,password 2019-01-04 11:22:30.953 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch : Далее метод аутентификации: gssapi-with-mic Имя пользователя Kerberos [bradley.dudra]: пароль Kerberos для bradley.dudra: 2019-01-04 11:34:28.546 INFO 11240 --- [ask-scheduler-1] com.jcra ft.jsch : Аутентификации, которые могут быть продолжены: открытый ключ, интерактивная клавиатура, пароль -01-04 11:34:28.548 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch : Аутентификации, которые могут продолжаться: пароль 2019-01-04 11:34:28.548 INFO 11240 --- [ask -scheduler-1] com.jcraft.jsch : следующий метод аутентификации: пароль

После этого аутентификация работает. Мне нужно с самого начала исключить попытку аутентификации по паролю.


person NoobWebDev    schedule 04.01.2019    source источник


Ответы (1)


Я думаю, что ваше свойство в конфигурации сеанса неверно: попробуйте следующее:

config.setProperty("PreferredAuthentications", "password");

просмотрите поддерживаемые свойства Здесь

person stacker    schedule 04.01.2019
comment
Сделал вышеуказанное изменение и теперь получаю следующую ошибку: 2019-01-04 14:18:03.377 ОШИБКА 9028 --- [ask-scheduler-5] o.s.integration.handler.LoggingHandler: org.springframework.messaging.MessagingException: Проблема произошло при синхронизации '/InternatlPgms/INTO/Archive/Receipt' с локальным каталогом; вложенным исключением является org.springframework.messaging.MessagingException: не удалось выполнить сеанс; вложенным исключением является org.springframework.integration.util.PoolItemNotAvailableException: не удалось получить объединенный элемент. - person NoobWebDev; 05.01.2019
comment
@NoobWebDev измените метод на пароль, я обновил ответ - person stacker; 05.01.2019
comment
Спасибо. Это сделало это - person NoobWebDev; 06.01.2019