Установка предпочтительного метода аутентификации в Spring SFTP - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь создать 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 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch: SSH_MSG_NEWKEYS отправлено 2019-01-04 11: 22: 30.938 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch: SSH_MSG_NEWKEYS получено 2019-01-04 11: 22: 30.943 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch: SSH_MSG_SERVICE_REQUEST отправлено 2019-01-04 11: 22: 30.948 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch: SSH_MSG_SERVICE_ACCEPT получено 2019-01-04 11: 22: 30.952 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch: аутентификации, которые могут продолжаться: gssapi-with-mic, publickey, клавиатура-интерактив, пароль 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.jcraft.jsch: аутентификации, которые могут продолжаться: publickey, клавиатура-интерактив, пароль 2019-01-04 11: 34: 28.547 INFO 11240 --- [ask-scheduler-1] com.jcraft.jsch: Следующий метод аутентификации: publickey 2019-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: Следующий метод аутентификации: пароль

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

1 Ответ

0 голосов
/ 04 января 2019

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

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

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

...