Как установить корневой каталог в 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

Другие вопросы по тегам