java - 在内存/嵌入式 SFTP 服务器中,用于在 Java 中使用私钥身份验证进行测试

标签 java unit-testing authentication ssh apache-mina

场景是,我需要为执行 SFTP 文件传输的应用程序编写测试,并且需要一个具有私钥身份验证实现的内存/嵌入式 SFTP 服务器,以便我可以测试文件传输使用私钥 (.pem) 文件身份验证的嵌入式/内存服务器运行正常。

我翻遍了互联网,最接近的是Apache Mina Server as discussed in this S.O. question

目前我使用的用户名和密码身份验证如下:

SshServer sshd = SshServer.setUpDefaultServer();
sshd.setPort(22999);

sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
sshd.setPasswordAuthenticator(new PasswordAuthenticator() {

    public boolean authenticate(String username, String password,
                                ServerSession session) {
        // TODO Auto-generated method stub
        return true;
    }
});

我尝试寻找一种方法来实现私钥身份验证,但似乎只有一个身份 validator ,但这是一个公钥身份 validator ,如下所示:

public void setPublickeyAuthenticator(PublickeyAuthenticator publickeyAuthenticator) {
    this.publickeyAuthenticator = publickeyAuthenticator;
}

有没有办法用 Apache Mina 实现私钥 validator ?或者如果不可能的话,是否有任何其他模拟 SFTP 服务器可以用于我的测试场景?

最佳答案

您实际上正在寻找公钥 validator

客户端/用户使用其公钥进行身份验证。服务器永远看不到私钥。


因此,您实现了 PublickeyAuthenticator 接口(interface)来检查 authenticate 方法的 PublicKey key 参数是否与您的 key 对的公共(public)部分匹配在您的客户端中使用来进行身份验证。

您可以从使用 OpenSSH .ssh/authorized_keysAuthorizedKeysAuthenticator 实现开始-类似配置文件。

关于java - 在内存/嵌入式 SFTP 服务器中,用于在 Java 中使用私钥身份验证进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36280041/

相关文章:

java - 关于 ArrayList 语法的说明

sql - 还有一个回滚错误和 tSQLt.ExpectException

java - 是重载该方法更好,还是使用可变参数传递 0 到 1 个变量? java

php - MySQL "no database selected"

authentication - 使用 Websphere Application Server (WAS) 和 LTPA 模拟用户/密码数据源

java - GAE 上的 Spring 4.2.1 和 java.util.ResourceBundle$Control 是受限类

java - 从 Google Calendar API 访问数据时出现问题

asp.net - 如何在 ASP.Net MVC 5 站点中设置 NameClaimType?

java - 在websphere本地信任库中添加证书;以编程方式

python - 在旧版本的 Python 中使用 `@unittest.skipIf`