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