我使用 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");
}
}
}
&#13;
答案 0 :(得分:4)
在默认情况下,它从名为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";
}
};
};
});
答案 1 :(得分:2)
您还可以按照以下链接了解如何在具有不同 sshd-core 版本的Apache Mina sshd SFTP服务器中设置根目录。
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>0.10.0</version>
</dependency>
进入
<dependency>
<groupId>org.apache.sshd</groupId>
<artifactId>sshd-core</artifactId>
<version>0.14.0</version>
</dependency>
How to override getVirtualUserDir() in Apache Mina sshd-core version 0.14.0
答案 2 :(得分:2)
在最新的sshd版本中,可以使用org.apache.sshd.common.file.virtualfs.VirtualFileSystemFactory
并通过方法SshServer
将其提供给setFileSystemFactory
实例。