2015-04-01 2 views
9

я использую Apache Mina Sshd API запустить локальный сервер SFTP в java.In SFTP клиента я использую JCraft JSch API создать свой SFTP client.I успешно запустить сервер. Проблема в том, что я хочу написать некоторые тестовые примеры для проверки того, может ли клиент поместить некоторые файлы в корневой каталог сервера. В настоящее время мой SFTP-сервер не имеет корневого каталога. Поэтому мне хотелось бы знать, что есть какой-либо подход к установке корневого каталога сервера.Как установить корневой каталог в Apache Mina Sshd сервер в Java

Например: C: \ sftp Как я могу установить этот путь в качестве корневого каталога root.so, тогда клиент может читать и записывать файлы при каждом подключении к серверу. Спасибо.

public class SftpServerStarter { 
 
\t 
 
\t private SshServer sshd; 
 
\t private final static Logger logger = LoggerFactory.getLogger(SftpServerStarter.class); 
 
\t 
 
\t public void start(){ 
 
\t \t 
 
\t \t 
 
\t \t sshd = SshServer.setUpDefaultServer(); 
 
\t \t sshd.setPort(22); 
 
\t \t sshd.setHost("localhost"); 
 
\t \t 
 
     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 { 
 
     \t logger.info("Starting ..."); 
 
\t \t \t sshd.start(); 
 
\t \t \t logger.info("Started"); 
 
\t \t } catch (IOException e) { 
 
\t \t \t // TODO Auto-generated catch block 
 
\t \t \t e.printStackTrace(); 
 
\t \t \t logger.info("Can not Start Server"); 
 
\t \t } 
 
\t } 
 
\t 
 
}

+0

возможный дубликат [Как запустить сервер SFTP программно в Java] (http://stackoverflow.com/questions/29531342/how-to-start -sftp-server-programatically-in-java) –

+0

@ DanielNewtown Привет, друг, я знаю, что это долгое время назад. Не могли бы вы повторно опубликовать эту статью в ссылке? он возвращает 404, когда мы говорим. Заранее спасибо –

ответ

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

Он отлично работает. Спасибо, что вы сэкономите свое время. – gihan

2

Вы также можете следить за ссылкой, чтобы знать о том, как установить корневой каталог в Apache Mina Sshd сервере SFTP с различным SSHD двухъядерного версии.

<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

+0

Большое спасибо! Это единственное решение, доступное для версии sshd-core версии 0.14.0. – Brain

Смежные вопросы