Я использую Apache Mina SSHD для реализации тестового SFTPServer. Мне удалось заставить все работать для простой аутентификации по паролю, однако я не могу настроить что-то для аутентификации с помощью публичного ключа. У меня реализован интерфейс PublickeyAuthenticator следующим образом:
public class SimpleKeyAuthenticator implements PublickeyAuthenticator {
@Override
public boolean authenticate(String username, PublicKey key, ServerSession session) {
System.out.println("In authenticate");
return false;
}
}
Моя реализация сервера выглядит следующим образом:
...
sshd = SshServer.setUpDefaultServer();
sshd.setPort(2222);
//sshd.setPort(config.getSFTPPort());
//sshd.setKeyPairProvider(new
sshd.setKeyPairProvider(new PEMGeneratorHostKeyProvider("hostkey.pem"));
//sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
sshd.setPublickeyAuthenticator(new SimpleKeyAuthenticator());
sshd.setFileSystemFactory(new SimpleFileSystemFactory());
List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
userAuthFactories.add(new UserAuthNone.Factory());
sshd.setUserAuthFactories(userAuthFactories);
sshd.setCommandFactory(new ScpCommandFactory());
List<NamedFactory<Command>> namedFactoryList = new ArrayList<NamedFactory<Command>>();
namedFactoryList.add(new SftpSubsystem.Factory());
sshd.setSubsystemFactories(namedFactoryList);
sshd.setSessionFactory(new SimpleSessionFactory(handler));
try {
sshd.start();
} catch (Exception e) {
e.printStackTrace();
}
Однако, когда я пытаюсь получить файл с помощью моего SFTP-клиента, все работает. Я ожидаю, что метод аутентификации потерпит неудачу, учитывая, что он всегда возвращает false. Я попытался настроить KeyPairProvider для использования как PEMGeneratorHostKeyProvider, так и SimpleGeneratorHostKeyProvider. Я также настроил PublicKeyAuthenticator на использование моего класса SimpleKeyAuthenticator. Обратите внимание: когда я смотрю на вывод консоли, я никогда не вижу «В аутентификации», поэтому я знаю, что аутентификация никогда не вызывается. Может ли кто-нибудь указать мне, что я пропустил? Любая помощь приветствуется.
С уважением, Марк