我使用 Apache Mina Sshd API 在Java中启动本地SFTP服务器。在SFTP客户端中,我使用 Jcraft jsch API 创建我的SFTP客户端。我成功启动了服务器。问题是我想写一些单元测试用例,以检查客户端是否可以将一些文件放入服务器的根目录中。目前我的SFTP服务器没有任何根目录,所以我想知道有什么方法可以设置服务器的根目录。
例如: C:\sftp 我如何将此路径设置为服务器根目录。这样,每次与服务器连接时,客户端都可以在其中读写文件。谢谢。
public class SftpServerStarter {
private SshServer sshd;
private final static Logger logger =
LoggerFactory.getLogger(SftpServerStarter.class);
public void start(){
sshd = SshServer.setUpDefaultServer();
sshd.setPort(22);
sshd.setHost("localhost");
sshd.setPasswordAuthenticator(new MyPasswordAuthenticator());
sshd.setPublickeyAuthenticator(new MyPublickeyAuthenticator());
sshd.setKeyPairProvider(new SimpleGeneratorHostKeyProvider());
sshd.setSubsystemFactories(
Arrays.<NamedFactory<Command>>asList(new SftpSubsystem.Factory()));
sshd.setCommandFactory(new ScpCommandFactory());
try {
logger.info("Starting ...");
sshd.start();
logger.info("Started");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.info("Can not Start Server");
}
}
}
最佳答案
在默认情况下,它采用System属性的根路径user.dir
为了更改此设置,您可以覆盖getVirtualUserDir()
中的NativeFileSystemView
并返回路径。
sshd.setFileSystemFactory(new NativeFileSystemFactory() {
@Override
public FileSystemView createFileSystemView(final Session session) {
return new NativeFileSystemView(session.getUsername(), false) {
@Override
public String getVirtualUserDir() {
return "C:\\MyRoot";
}
};
};
});
关于java - 如何在Java中的Apache Mina Sshd Server中设置根目录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29389249/