场景是,我需要为执行 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_keys
的 AuthorizedKeysAuthenticator
实现开始-类似配置文件。
关于java - 在内存/嵌入式 SFTP 服务器中,用于在 Java 中使用私钥身份验证进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36280041/