Попытка реализовать аутентификацию PublicKey для тестового сервера SFTP с использованием Apache Mina. Однако метод Authenticate не вызывается

Я использую 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. Обратите внимание: когда я смотрю на вывод консоли, я никогда не вижу «В аутентификации», поэтому я знаю, что аутентификация никогда не вызывается. Может ли кто-нибудь указать мне, что я пропустил? Любая помощь приветствуется.

С уважением, Марк


person Mark    schedule 29.04.2013    source источник


Ответы (1)


// строка ниже сделает вход клиента без какой-либо проверки.

userAuthFactory.add (новый UserAuthNone.Factory());

Вы должны изменить его следующим образом:

userAuthFactory.add (новый UserAuthPublicKey.Factory());

person cza55007    schedule 16.10.2013
comment
new UserAuthNone.Factory() больше не существует в этой библиотеке с версии 2.3.0, и я понятия не имею, почему... кто-нибудь использовал последнюю версию этой библиотеки для аутентификации pubkey? Документации не существует, кроме некоторых сухих javadocs - person Amalgovinus; 10.04.2020