如何在Java中的Apache Mina Sshd Server中设置根目录


问题内容

我使用 Apache Mina Sshd APIJava 中启动本地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的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";
                }
            };
        };
    });