2013-04-29 23 views
5

Sto utilizzando Apache Mina SSHD per implementare un SFTPServer di test. Sono stato in grado di ottenere le cose lavorando per l'autenticazione della password semplice, tuttavia non sono in grado di configurare le cose per l'autenticazione PublicKey. Ho un implementato l'interfaccia PublickeyAuthenticator come segue,Tentativo di implementare l'autenticazione PublicKey per il server di prova SFTP utilizzando Apache Mina. Tuttavia, il metodo Authenticate non viene chiamato

public class SimpleKeyAuthenticator implements PublickeyAuthenticator { 

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

} 

mia implementazione del server è la seguente,

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

Tuttavia quando cerco di ottenere un file usando il mio client SFTP tutto funziona. Mi aspetto che il metodo di autenticazione fallisca dato che restituisce sempre false. Ho provato a impostare KeyPairProvider per utilizzare sia PEMGeneratorHostKeyProvider che SimpleGeneratorHostKeyProvider. Ho anche impostato PublicKeyAuthenticator per utilizzare la mia classe SimpleKeyAuthenticator. Nota, quando guardo l'output della console non vedo mai "In authenticate", quindi so che Authenticate non viene mai chiamato. Qualcuno potrebbe per favore indicarmi cosa mi è mancato? Qualsiasi aiuto è apprezzato.

saluti, Mark

risposta

2

// sotto la linea faranno login client senza alcuna convalida.

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

Si dovrebbe cambiare in questo modo:

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