2013-04-29 36 views
5

Używam Apache Mina SSHD do wdrożenia testu SFTPServer. Udało mi się uzyskać rzeczy działające w celu prostego uwierzytelniania Hasłem, jednak nie jestem w stanie skonfigurować rzeczy do uwierzytelniania PublicKey. Mam realizowane interfejs PublickeyAuthenticator następująco,Próba wdrożenia uwierzytelniania PublicKey dla serwera testowego SFTP przy użyciu Apache Mina. Jednak metoda Authenticate nie jest nazywana

public class SimpleKeyAuthenticator implements PublickeyAuthenticator { 

    @Override 
    public boolean authenticate(String username, PublicKey key, ServerSession session) { 
     System.out.println("In authenticate"); 
     return false; 
    } 

} 

Moja implementacja serwera jest następujący,

... 
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(); 
} 

Jednak gdy próbuję pobrać plik za pomocą mój SFTP wszystko działa. Spodziewam się, że metoda uwierzytelniania nie powiedzie się, ponieważ zawsze zwraca wartość false. Próbowałem ustawić KeyPairProvider, aby używać zarówno PEMGeneratorHostKeyProvider i SimpleGeneratorHostKeyProvider. Ustawiłem również narzędzie PublicKeyAuthenticator do korzystania z mojej klasy SimpleKeyAuthenticator. Uwaga: kiedy patrzę na wyjście konsoli, nigdy nie widzę opcji "W uwierzytelnieniu", więc wiem, że Authenticate nigdy nie jest wywoływany. Czy ktoś mógłby mi wskazać, co przeoczyłem? Każda pomoc jest doceniana.

Pozdrowienia, Mark

Odpowiedz

2

// poniżej linii uczyni logowanie klienta bez walidacji.

userAuthFactories.add (new UserAuthNone.Factory());

należy go zmienić tak:

userAuthFactories.add (nowa UserAuthPublicKey.Factory());