Я пытаюсь создать 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 : следующий метод аутентификации: пароль
После этого аутентификация работает. Мне нужно с самого начала исключить попытку аутентификации по паролю.