Я пытаюсь создать приложение, которое использует Spring Boot and Integration для извлечения файлов из удаленной системы через SSH.Это прекрасно работает, если я установил для свойства allowUnknownKeys
SessionFactory значение true.
@Bean
public SessionFactory<LsEntry> sftpSessionFactory() {
DefaultSftpSessionFactory factory = new DefaultSftpSessionFactory(true);
factory.setHost("x");
factory.setPort(22);
factory.setUser("x");
factory.setPassword("x");
factory.setAllowUnknownKeys(true);
// factory.setHostKeyAlias("x");
// factory.setKnownHosts(
// System.getProperty("user.home") + File.separator + ".ssh" + File.separator + "known_hosts");
return new CachingSessionFactory<LsEntry>(factory);
}
Однако, если установить allowUnknownKeys
в значение false и раскомментировать строки в фрагменте выше, соединение не можетбыть установленным.
2019-01-21 08: 55: 05.536 ОШИБКА 10680 --- [ask-scheduler-1] osintegration.handler.LoggingHandler: org.springframework.messaging.MessagingException: возникла проблема при синхронизации 'sftp-outbound в локальный каталог;вложенным исключением является org.springframework.messaging.MessagingException: не удалось выполнить в сеансе;вложенное исключение - org.springframework.integration.util.PoolItemNotAvailableException: не удалось получить объединенный элемент
Основная причина заключается в том, что «подлинность хоста» не может быть установлена, и она требует от менядать разрешение на установление связи.Это я поняла.Однако моя проблема заключается в том, почему он неправильно читает / анализирует файл known_hosts?Тот, который я передаю, автоматически генерируется, и он прекрасно работает, когда я запускаю ssh в систему через командную строку.Используя точки останова, я убедился, что приложение находит и читает правильный файл known_hosts
.Я могу использовать точно такие же учетные данные и подключаться через оболочку Bash без каких-либо подсказок относительно подлинности хоста.
Чего мне не хватает?
Спасибо.