2013-04-29 10 views
5

테스트 SFTPServer를 구현하기 위해 Apache Mina SSHD를 사용하고 있습니다. 필자는 간단한 암호 인증을 위해 일을 처리 할 수 ​​있었지만 PublicKey 인증을 위해 구성 할 수는 없습니다. 다음과 같이 내 SFTP 클라이언트 모든 작품 사용하여 파일을 얻을 때 나는 그러나, 다음과 같이Apache Mina를 사용하여 SFTP 테스트 서버용 PublicKey 인증을 구현하려고합니다. 그러나 Authenticate 메소드가 호출되지 않습니다.

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

을 PublickeyAuthenticator 인터페이스를 구현했습니다. 항상 false를 반환하는 경우 authenticate 메소드가 실패 할 것으로 예상됩니다. KeyPairProvider를 설정하여 PEMGeneratorHostKeyProvider 및 SimpleGeneratorHostKeyProvider를 모두 사용하려고했습니다. 또한 SimpleKeyAuthenticator 클래스를 사용하도록 PublicKeyAuthenticator를 설정했습니다. 콘솔 출력을 볼 때 '인증 있음'이 표시되지 않으므로 Authenticate가 호출되지 않습니다. 누군가 내가 놓친 것에 나를 가리켜 주시겠습니까? 어떤 도움을 주셔서 감사합니다.

안부, 행 아래 마크

답변

2

// 어떤 검증없이 클라이언트 로그인을 만들 것입니다.

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

당신은 다음과 같이 변경한다 :

userAuthFactories.add (새 UserAuthPublicKey.Factory()를);