我已经安装了Apache Mina Sshd SFTP服务器,并向其中添加了一些用户权限。要测试我使用Winscp,但我可以连接服务器而无需键入正确的密码和用户名。似乎从未调用过SetPasswordAuthenticator方法,所以我想知道如何为apache mina sshd SFTP服务器设置用户名和密码,以启动安全服务器。

我的服务器代码,

sshd = SshServer.setUpDefaultServer();
    sshd.setPort(2525);
    sshd.setHost("172.xx.xx.xx");
    sshd.setPasswordAuthenticator(new MyPasswordAuthenticator());
    sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
    sshd.setSubsystemFactories(Arrays.<NamedFactory<Command>> asList(new SftpSubsystem.Factory()));

    List<NamedFactory<UserAuth>> userAuthFactories = new ArrayList<NamedFactory<UserAuth>>();
    userAuthFactories.add(new UserAuthNone.Factory());
    sshd.setUserAuthFactories(userAuthFactories);

    sshd.setCommandFactory(new ScpCommandFactory());

    sshd.setKeyExchangeFactories(Arrays
            .<NamedFactory<KeyExchange>> asList(new DHG1.Factory()));
    sshd.setCommandFactory(new ScpCommandFactory());
    sshd.setFileSystemFactory(new VirtualFileSystemFactory("C:/root"));


MyPasswordAuthenticator代码,

public class MyPasswordAuthenticator implements PasswordAuthenticator {

public boolean authenticate(String username, String password, ServerSession session) {
    boolean retour = false;

    if ("user".equals(username) && "123".equals(password)) {
        retour = true;
    }

    return retour;
}


}

Maven的依赖

<dependency>
        <groupId>org.apache.mina</groupId>
        <artifactId>mina-core</artifactId>
        <version>2.0.9</version>
    </dependency>
    <dependency>
        <groupId>org.apache.sshd</groupId>
        <artifactId>sshd-sftp</artifactId>
        <version>0.11.0</version>
    </dependency>

    <dependency>
        <groupId>org.apache.sshd</groupId>
        <artifactId>sshd-core</artifactId>
        <version>0.14.0</version>
    </dependency>


我是Apache Mina Sshd的新手,不胜感激。

最佳答案

最终我找出了问题所在。通过删除下面的代码,您可以在服务器上执行sshd.setPasswordAuthenticator。

List<NamedFactory<UserAuth>> userAuthFactories = new  ArrayList<NamedFactory<UserAuth>>();
userAuthFactories.add(new UserAuthNone.Factory());
sshd.setUserAuthFactories(userAuthFactories);


注意:如果需要更高的安全性,可以使用上面的代码段以及正确的实现方式,但只需添加sshd.setPasswordAuthenticator(new MyPasswordAuthenticator());,即可为服务器设置基本密码验证。

关于java - Apache Mina Sshd SetPasswordAuthenticator不执行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29816206/

10-10 16:40