Как установить корневой каталог в Apache Mina Sshd Server на Java
Я использую Apache Mina Sshd API для запуска локального SFTP-сервера в java. В 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");
}
}
}
3 ответа
В По умолчанию это берет корневой путь от Системного свойства, названного 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";
}
};
};
});
В более поздних версиях sshd вы можете использовать org.apache.sshd.common.file.virtualfs.VirtualFileSystemFactory
и поставьте его SshServer
экземпляр с помощью метода setFileSystemFactory
,
Вы также можете перейти по следующей ссылке, чтобы узнать, как установить корневой каталог на SFTP-сервере Apache Mina с другой версией sshd-core.
<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>
Как переопределить getVirtualUserDir() в sshd-ядре Apache Mina версии 0.14.0