我使用 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/

10-09 05:44