2015-04-01 20 views
9

tôi sử dụng Apache Mina sshd API để bắt đầu lên một máy chủ SFTP địa phương trong java.In SFTP client tôi sử dụng Jcraft jsch API để tạo SFTP client.I của tôi thành công khởi động một máy chủ. Vấn đề là tôi muốn viết một số trường hợp thử nghiệm đơn vị để kiểm tra xem khách hàng có thể đặt một số tệp vào thư mục gốc của máy chủ hay không. Hiện tại máy chủ SFTP của tôi không có bất kỳ thư mục gốc nào. Do đó, tôi muốn biết rằng có bất kỳ phương pháp nào để đặt thư mục gốc của máy chủ.Làm thế nào để Đặt Root Directory trong Apache Mina sshd Server trong Java

Ví dụ: C: \ sftp Làm cách nào để đặt đường dẫn này làm thư mục gốc của máy chủ.

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

trùng lặp có thể xảy ra [Làm thế nào để khởi động máy chủ SFTP lập trình trong java] (http://stackoverflow.com/questions/29531342/how-to-start -sftp-server-programmatically-in-java) –

+0

@DanielNewtown Xin chào bạn, tôi biết đây là một thời gian dài trở lại .. bạn có thể vui lòng đăng lại bài viết đó trong liên kết không? nó trả về 404 ngay khi chúng ta nói. Cảm ơn trước –

Trả lời

4

Trong Mặc định nó có các đường dẫn gốc từ sở hữu hệ thống gọi là user.dir

Inorder để thay đổi điều này, bạn có thể ghi đè lên getVirtualUserDir() trong NativeFileSystemView và trở về con đường của bạn.

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

Nó hoạt động tốt. Cảm ơn bạn thân bạn tiết kiệm thời gian của tôi. – gihan

2

Bạn cũng có thể đi theo liên kết sau để biết về cách thiết lập thư mục gốc trong Apache Mina sshd máy chủ SFTP với phiên bản sshd-core khác nhau.

<dependency> 
     <groupId>org.apache.sshd</groupId> 
     <artifactId>sshd-core</artifactId> 
     <version>0.10.0</version> 
    </dependency> 

vào

<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

Cảm ơn bạn rất nhiều! Đó là giải pháp duy nhất có sẵn cho phiên bản 0.14.0 của sshd-core. – Brain

Các vấn đề liên quan