Apache Mina SSHD - FileZilla 显示错误的目录结构

Apache Mina SSHD - FileZilla shows wrong directory structure

我使用 Apache Mina SSHD 将 SSH 服务器设置为 SFTP 服务器。我实现了自己的 FileSystemFactory,以便为登录的用户创建特定目录。当我使用 FileZilla 打开与服务器的连接时,目录结构显示错误。

在根目录视图中,显示一个空文件夹。这个不存在。应该只有两个目录。 "Upload" 和 "Download".

当我打开上传目录时,我再次看到一个空目录,不应该显示,因为它不存在。此外,还显示了另一个上传目录。我无法打开它,因为它说 /upload/upload 不存在,这是真的,但我不明白为什么会显示它。

当我连接 WinSCP 时,我没有得到这个显示错误。有谁知道为什么会这样或者怎么解决?

编辑:

FileSystemFactory 实施:

public class CustomFileSystemFactory implements FileSystemFactory {
  private String defaultHomeDir;
  private FileSystem fileSystem;

  public CustomFileSystemFactory(String defaultHomeDir){
    this.defaultHomeDir = defaultHomeDir;
  }

  public String getDefaultHome(){
    return defaultHomeDir;
  }

  public FileSystem getFileSystem(){
    return fileSystem;
  }

  @Override
  public FileSystem createFileSystem(Session session) throws IOException {
    Path dir = computeRootDir(session.getUsername());
    if (dir == null) {
      throw new InvalidPathException(session.getUsername(), "Cannot resolve home directory");
    }

    if(!Files.exists(dir)){
      Files.createDirectory(dir);
    }
    setupFolders(session.getUsername());
    FileSystem fileSystem = new RootedFileSystemProvider().newFileSystem(dir, Collections.emptyMap());
    return fileSystem;
  }

  protected Path computeRootDir(String username){
    Path path = Paths.get(defaultHomeDir + Utils.getPrincipalExtId(username) + "/");
    return path;
  }

  protected void setupFolders(String username) throws IOException {
    Path homeDir = computeRootDir(username);
    File uploadFolder = new File(homeDir + "/upload/");
    File downloadFolder = new File(homeDir + "/download/");
    if(!uploadFolder.exists()){
      uploadFolder.mkdirs();
    }
    if(!downloadFolder.exists()){
      downloadFolder.mkdirs();
    }
  }
}

这是调试级别 2 上的 WinSCP 日志:

. 2016-01-07 14:46:46.909 Listing directory "/".
> 2016-01-07 14:46:46.909 Type: SSH_FXP_OPENDIR, Size: 10, Number: 4107
> 2016-01-07 14:46:46.909 0B,00,00,10,0B,00,00,00,01,2F,
. 2016-01-07 14:46:46.909 Sent 14 bytes
. 2016-01-07 14:46:46.909 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:46.909 Looking for network events
. 2016-01-07 14:46:46.909 Timeout waiting for network events
. 2016-01-07 14:46:46.909 Waiting for another 4 bytes
. 2016-01-07 14:46:46.909 Looking for incoming data
. 2016-01-07 14:46:46.909 Looking for network events
. 2016-01-07 14:46:46.913 Detected network event
. 2016-01-07 14:46:46.913 Enumerating network events for socket 1084
. 2016-01-07 14:46:46.913 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:46.913 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:46.913 Received 45 bytes (0)
. 2016-01-07 14:46:46.913 Read 4 bytes (41 pending)
. 2016-01-07 14:46:46.913 Read 41 bytes (0 pending)
< 2016-01-07 14:46:46.913 Type: SSH_FXP_HANDLE, Size: 41, Number: 4107
< 2016-01-07 14:46:46.913 66,00,00,10,0B,00,00,00,20,34,34,30,63,33,34,36,32,62,30,34,65,39,37,32,61,
< 2016-01-07 14:46:46.913 34,39,34,62,62,31,30,64,36,65,62,61,35,65,61,33,
> 2016-01-07 14:46:46.913 Type: SSH_FXP_READDIR, Size: 41, Number: 4364
> 2016-01-07 14:46:46.913 0C,00,00,11,0C,00,00,00,20,34,34,30,63,33,34,36,32,62,30,34,65,39,37,32,61,
> 2016-01-07 14:46:46.913 34,39,34,62,62,31,30,64,36,65,62,61,35,65,61,33,
. 2016-01-07 14:46:46.913 Sent 45 bytes
. 2016-01-07 14:46:46.914 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:46.914 Looking for network events
. 2016-01-07 14:46:46.914 Timeout waiting for network events
. 2016-01-07 14:46:46.914 Waiting for another 4 bytes
. 2016-01-07 14:46:46.914 Looking for incoming data
. 2016-01-07 14:46:46.914 Looking for network events
. 2016-01-07 14:46:46.924 Detected network event
. 2016-01-07 14:46:46.924 Enumerating network events for socket 1084
. 2016-01-07 14:46:46.924 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:46.924 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:46.925 Received 1113 bytes (0)
. 2016-01-07 14:46:46.925 Read 4 bytes (1109 pending)
. 2016-01-07 14:46:46.925 Read 1109 bytes (0 pending)
< 2016-01-07 14:46:46.925 Type: SSH_FXP_NAME, Size: 1109, Number: 4364
< 2016-01-07 14:46:46.925 68,00,00,11,0C,00,00,00,03,00,00,00,01,2E,00,00,00,7C,02,00,00,41,B6,00,00,
< 2016-01-07 14:46:46.925 00,00,56,79,11,96,00,00,00,00,56,79,11,96,00,00,00,00,56,79,11,96,00,00,01,
< 2016-01-07 14:46:46.925 37,00,00,00,07,00,00,00,00,00,00,00,00,00,1F,01,FF,00,00,00,1C,56,4F,52,44,
< 2016-01-07 14:46:46.925 45,46,49,4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,72,61,74,6F,72,65,6E,00,
< 2016-01-07 14:46:46.925 00,00,00,00,00,00,0B,00,00,00,00,00,00,00,1C,56,4F,52,44,45,46,49,4E,49,45,
< 2016-01-07 14:46:46.925 52,54,5C,41,64,6D,69,6E,69,73,74,72,61,74,6F,72,65,6E,00,00,00,00,00,00,00,
< 2016-01-07 14:46:46.925 00,00,1F,01,FF,00,00,00,14,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,53,59,
< 2016-01-07 14:46:46.925 53,54,45,4D,00,00,00,00,00,00,00,0B,00,00,00,00,00,00,00,14,4E,54,2D,41,55,
< 2016-01-07 14:46:46.925 54,4F,52,49,54,C3,84,54,5C,53,59,53,54,45,4D,00,00,00,00,00,00,00,03,00,12,
< 2016-01-07 14:46:46.925 00,A9,00,00,00,15,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,42,65,6E,75,74,7A,
< 2016-01-07 14:46:46.925 65,72,00,00,00,00,00,00,00,00,00,13,01,BF,00,00,00,27,4E,54,2D,41,55,54,4F,
< 2016-01-07 14:46:46.925 52,49,54,C3,84,54,5C,41,75,74,68,65,6E,74,69,66,69,7A,69,65,72,74,65,20,42,
< 2016-01-07 14:46:46.925 65,6E,75,74,7A,65,72,00,00,00,00,00,00,00,0B,00,01,00,00,00,00,00,27,4E,54,
< 2016-01-07 14:46:46.925 2D,41,55,54,4F,52,49,54,C3,84,54,5C,41,75,74,68,65,6E,74,69,66,69,7A,69,65,
< 2016-01-07 14:46:46.925 72,74,65,20,42,65,6E,75,74,7A,65,72,00,00,00,08,64,6F,77,6E,6C,6F,61,64,00,
< 2016-01-07 14:46:46.925 00,00,7C,02,00,00,41,B6,00,00,00,00,56,8E,52,55,00,00,00,00,56,8E,52,55,00,
< 2016-01-07 14:46:46.925 00,00,00,56,8E,52,55,00,00,01,54,00,00,00,08,00,00,00,00,00,00,00,03,00,1F,
< 2016-01-07 14:46:46.925 01,FF,00,00,00,0D,44,55,53,5C,6E,6D,65,63,6B,6D,61,6E,6E,00,00,00,00,00,00,
< 2016-01-07 14:46:46.925 00,00,00,1F,01,FF,00,00,00,1C,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,41,64,
< 2016-01-07 14:46:46.925 6D,69,6E,69,73,74,72,61,74,6F,72,65,6E,00,00,00,00,00,00,00,0B,00,00,00,00,
< 2016-01-07 14:46:46.925 00,00,00,1C,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,
< 2016-01-07 14:46:46.925 72,61,74,6F,72,65,6E,00,00,00,00,00,00,00,00,00,1F,01,FF,00,00,00,14,4E,54,
< 2016-01-07 14:46:46.925 2D,41,55,54,4F,52,49,54,C3,84,54,5C,53,59,53,54,45,4D,00,00,00,00,00,00,00,
< 2016-01-07 14:46:46.925 0B,00,00,00,00,00,00,00,14,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,53,59,
< 2016-01-07 14:46:46.925 53,54,45,4D,00,00,00,00,00,00,00,03,00,12,00,A9,00,00,00,15,56,4F,52,44,45,
< 2016-01-07 14:46:46.925 46,49,4E,49,45,52,54,5C,42,65,6E,75,74,7A,65,72,00,00,00,00,00,00,00,00,00,
< 2016-01-07 14:46:46.925 13,01,BF,00,00,00,27,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,41,75,74,68,
< 2016-01-07 14:46:46.925 65,6E,74,69,66,69,7A,69,65,72,74,65,20,42,65,6E,75,74,7A,65,72,00,00,00,00,
< 2016-01-07 14:46:46.925 00,00,00,0B,00,01,00,00,00,00,00,27,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,
< 2016-01-07 14:46:46.925 5C,41,75,74,68,65,6E,74,69,66,69,7A,69,65,72,74,65,20,42,65,6E,75,74,7A,65,
< 2016-01-07 14:46:46.925 72,00,00,00,06,75,70,6C,6F,61,64,00,00,00,7C,02,00,00,41,B6,00,00,00,00,56,
< 2016-01-07 14:46:46.925 8E,51,ED,00,00,00,00,56,8E,51,ED,00,00,00,00,56,8E,51,ED,00,00,01,37,00,00,
< 2016-01-07 14:46:46.925 00,07,00,00,00,00,00,00,00,00,00,1F,01,FF,00,00,00,1C,56,4F,52,44,45,46,49,
< 2016-01-07 14:46:46.925 4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,72,61,74,6F,72,65,6E,00,00,00,00,
< 2016-01-07 14:46:46.925 00,00,00,0B,00,00,00,00,00,00,00,1C,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,
< 2016-01-07 14:46:46.925 41,64,6D,69,6E,69,73,74,72,61,74,6F,72,65,6E,00,00,00,00,00,00,00,00,00,1F,
< 2016-01-07 14:46:46.925 01,FF,00,00,00,14,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,53,59,53,54,45,
< 2016-01-07 14:46:46.925 4D,00,00,00,00,00,00,00,0B,00,00,00,00,00,00,00,14,4E,54,2D,41,55,54,4F,52,
< 2016-01-07 14:46:46.925 49,54,C3,84,54,5C,53,59,53,54,45,4D,00,00,00,00,00,00,00,03,00,12,00,A9,00,
< 2016-01-07 14:46:46.925 00,00,15,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,42,65,6E,75,74,7A,65,72,00,
< 2016-01-07 14:46:46.925 00,00,00,00,00,00,00,00,13,01,BF,00,00,00,27,4E,54,2D,41,55,54,4F,52,49,54,
< 2016-01-07 14:46:46.925 C3,84,54,5C,41,75,74,68,65,6E,74,69,66,69,7A,69,65,72,74,65,20,42,65,6E,75,
< 2016-01-07 14:46:46.925 74,7A,65,72,00,00,00,00,00,00,00,0B,00,01,00,00,00,00,00,27,4E,54,2D,41,55,
< 2016-01-07 14:46:46.926 54,4F,52,49,54,C3,84,54,5C,41,75,74,68,65,6E,74,69,66,69,7A,69,65,72,74,65,
< 2016-01-07 14:46:46.926 20,42,65,6E,75,74,7A,65,72,
> 2016-01-07 14:46:46.926 Type: SSH_FXP_READDIR, Size: 41, Number: 4620
> 2016-01-07 14:46:46.926 0C,00,00,12,0C,00,00,00,20,34,34,30,63,33,34,36,32,62,30,34,65,39,37,32,61,
> 2016-01-07 14:46:46.926 34,39,34,62,62,31,30,64,36,65,62,61,35,65,61,33,
. 2016-01-07 14:46:46.926 Sent 45 bytes
. 2016-01-07 14:46:46.926 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:46.926 Looking for network events
. 2016-01-07 14:46:46.926 Timeout waiting for network events
. 2016-01-07 14:46:46.926 Read file '.' from listing
. 2016-01-07 14:46:46.926 Read file 'download' from listing
. 2016-01-07 14:46:46.926 Read file 'upload' from listing
. 2016-01-07 14:46:46.926 Waiting for another 4 bytes
. 2016-01-07 14:46:46.926 Looking for incoming data
. 2016-01-07 14:46:46.926 Looking for network events
. 2016-01-07 14:46:46.926 Detected network event
. 2016-01-07 14:46:46.926 Enumerating network events for socket 1084
. 2016-01-07 14:46:46.926 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:46.926 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:46.926 Received 46 bytes (0)
. 2016-01-07 14:46:46.926 Read 4 bytes (42 pending)
. 2016-01-07 14:46:46.926 Read 42 bytes (0 pending)
< 2016-01-07 14:46:46.926 Type: SSH_FXP_STATUS, Size: 42, Number: 4620
< 2016-01-07 14:46:46.926 65,00,00,12,0C,00,00,00,01,00,00,00,19,44,69,72,65,63,74,6F,72,79,20,72,65,
< 2016-01-07 14:46:46.926 61,64,69,6E,67,20,69,73,20,64,6F,6E,65,00,00,00,00,
< 2016-01-07 14:46:46.926 Status code: 1
> 2016-01-07 14:46:46.926 Type: SSH_FXP_CLOSE, Size: 41, Number: 4868
> 2016-01-07 14:46:46.926 04,00,00,13,04,00,00,00,20,34,34,30,63,33,34,36,32,62,30,34,65,39,37,32,61,
> 2016-01-07 14:46:46.926 34,39,34,62,62,31,30,64,36,65,62,61,35,65,61,33,
. 2016-01-07 14:46:46.926 Sent 45 bytes
. 2016-01-07 14:46:46.926 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:46.926 Looking for network events
. 2016-01-07 14:46:46.926 Timeout waiting for network events
. 2016-01-07 14:46:46.927 download;D;0;2016-01-07T11:56:05.000Z;"" [0];"" [0];rw-rw-rw-;1
. 2016-01-07 14:46:46.927 upload;D;0;2016-01-07T11:54:21.000Z;"" [0];"" [0];rw-rw-rw-;1
. 2016-01-07 14:46:47.009 Startup conversation with host finished.
. 2016-01-07 14:46:47.122 Session upkeep
. 2016-01-07 14:46:47.122 Looking for network events
. 2016-01-07 14:46:47.122 Detected network event
. 2016-01-07 14:46:47.122 Enumerating network events for socket 1084
. 2016-01-07 14:46:47.122 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:47.122 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:47.122 Received 21 bytes (0)
. 2016-01-07 14:46:47.124 Session upkeep
. 2016-01-07 14:46:47.124 Looking for network events
. 2016-01-07 14:46:47.124 Timeout waiting for network events
. 2016-01-07 14:46:47.257 Session upkeep
. 2016-01-07 14:46:47.257 Looking for network events
. 2016-01-07 14:46:47.257 Timeout waiting for network events
. 2016-01-07 14:46:47.768 Session upkeep
. 2016-01-07 14:46:47.768 Looking for network events
. 2016-01-07 14:46:47.768 Timeout waiting for network events
. 2016-01-07 14:46:48.267 Session upkeep
. 2016-01-07 14:46:48.267 Looking for network events
. 2016-01-07 14:46:48.267 Timeout waiting for network events
. 2016-01-07 14:46:48.781 Session upkeep
. 2016-01-07 14:46:48.782 Looking for network events
. 2016-01-07 14:46:48.782 Timeout waiting for network events
. 2016-01-07 14:46:48.832 Cached directory change via "download" to "/download".
. 2016-01-07 14:46:48.832 Getting current directory name.
. 2016-01-07 14:46:48.832 Listing directory "/download".
> 2016-01-07 14:46:48.832 Type: SSH_FXP_OPENDIR, Size: 18, Number: 5131
> 2016-01-07 14:46:48.832 0B,00,00,14,0B,00,00,00,09,2F,64,6F,77,6E,6C,6F,61,64,
. 2016-01-07 14:46:48.832 Sent 22 bytes
. 2016-01-07 14:46:48.832 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:48.832 Looking for network events
. 2016-01-07 14:46:48.834 Timeout waiting for network events
. 2016-01-07 14:46:48.834 Read 4 bytes (17 pending)
. 2016-01-07 14:46:48.834 Read 17 bytes (0 pending)
< 2016-01-07 14:46:48.834 Type: SSH_FXP_STATUS, Size: 17, Number: 4868
< 2016-01-07 14:46:48.834 65,00,00,13,04,00,00,00,00,00,00,00,00,00,00,00,00,
. 2016-01-07 14:46:48.834 Discarding reserved response
. 2016-01-07 14:46:48.834 Waiting for another 4 bytes
. 2016-01-07 14:46:48.834 Looking for incoming data
. 2016-01-07 14:46:48.834 Looking for network events
. 2016-01-07 14:46:48.834 Detected network event
. 2016-01-07 14:46:48.834 Enumerating network events for socket 1084
. 2016-01-07 14:46:48.834 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:48.834 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:48.834 Received 45 bytes (0)
. 2016-01-07 14:46:48.834 Read 4 bytes (41 pending)
. 2016-01-07 14:46:48.834 Read 41 bytes (0 pending)
< 2016-01-07 14:46:48.834 Type: SSH_FXP_HANDLE, Size: 41, Number: 5131
< 2016-01-07 14:46:48.834 66,00,00,14,0B,00,00,00,20,30,61,33,38,32,30,37,31,37,64,61,65,34,34,39,61,
< 2016-01-07 14:46:48.834 30,31,66,36,32,65,35,61,33,34,65,34,30,33,39,34,
> 2016-01-07 14:46:48.834 Type: SSH_FXP_READDIR, Size: 41, Number: 5388
> 2016-01-07 14:46:48.834 0C,00,00,15,0C,00,00,00,20,30,61,33,38,32,30,37,31,37,64,61,65,34,34,39,61,
> 2016-01-07 14:46:48.834 30,31,66,36,32,65,35,61,33,34,65,34,30,33,39,34,
. 2016-01-07 14:46:48.835 Sent 45 bytes
. 2016-01-07 14:46:48.835 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:48.835 Looking for network events
. 2016-01-07 14:46:48.835 Timeout waiting for network events
. 2016-01-07 14:46:48.835 Waiting for another 4 bytes
. 2016-01-07 14:46:48.835 Looking for incoming data
. 2016-01-07 14:46:48.835 Looking for network events
. 2016-01-07 14:46:48.840 Detected network event
. 2016-01-07 14:46:48.840 Enumerating network events for socket 1084
. 2016-01-07 14:46:48.840 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:48.840 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:48.840 Received 749 bytes (0)
. 2016-01-07 14:46:48.840 Read 4 bytes (745 pending)
. 2016-01-07 14:46:48.840 Read 745 bytes (0 pending)
< 2016-01-07 14:46:48.840 Type: SSH_FXP_NAME, Size: 745, Number: 5388
< 2016-01-07 14:46:48.840 68,00,00,15,0C,00,00,00,02,00,00,00,01,2E,00,00,00,7C,02,00,00,41,B6,00,00,
< 2016-01-07 14:46:48.840 00,00,56,8E,52,55,00,00,00,00,56,8E,52,55,00,00,00,00,56,8E,52,55,00,00,01,
< 2016-01-07 14:46:48.840 54,00,00,00,08,00,00,00,00,00,00,00,03,00,1F,01,FF,00,00,00,0D,44,55,53,5C,
< 2016-01-07 14:46:48.840 6E,6D,65,63,6B,6D,61,6E,6E,00,00,00,00,00,00,00,00,00,1F,01,FF,00,00,00,1C,
< 2016-01-07 14:46:48.840 56,4F,52,44,45,46,49,4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,72,61,74,6F,
< 2016-01-07 14:46:48.840 72,65,6E,00,00,00,00,00,00,00,0B,00,00,00,00,00,00,00,1C,56,4F,52,44,45,46,
< 2016-01-07 14:46:48.840 49,4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,72,61,74,6F,72,65,6E,00,00,00,
< 2016-01-07 14:46:48.840 00,00,00,00,00,00,1F,01,FF,00,00,00,14,4E,54,2D,41,55,54,4F,52,49,54,C3,84,
< 2016-01-07 14:46:48.840 54,5C,53,59,53,54,45,4D,00,00,00,00,00,00,00,0B,00,00,00,00,00,00,00,14,4E,
< 2016-01-07 14:46:48.840 54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,53,59,53,54,45,4D,00,00,00,00,00,00,
< 2016-01-07 14:46:48.840 00,03,00,12,00,A9,00,00,00,15,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,42,65,
< 2016-01-07 14:46:48.840 6E,75,74,7A,65,72,00,00,00,00,00,00,00,00,00,13,01,BF,00,00,00,27,4E,54,2D,
< 2016-01-07 14:46:48.840 41,55,54,4F,52,49,54,C3,84,54,5C,41,75,74,68,65,6E,74,69,66,69,7A,69,65,72,
< 2016-01-07 14:46:48.840 74,65,20,42,65,6E,75,74,7A,65,72,00,00,00,00,00,00,00,0B,00,01,00,00,00,00,
< 2016-01-07 14:46:48.840 00,27,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,41,75,74,68,65,6E,74,69,66,
< 2016-01-07 14:46:48.840 69,7A,69,65,72,74,65,20,42,65,6E,75,74,7A,65,72,00,00,00,02,2E,2E,00,00,00,
< 2016-01-07 14:46:48.840 7C,02,00,00,41,B6,00,00,00,00,56,79,11,96,00,00,00,00,56,79,11,96,00,00,00,
< 2016-01-07 14:46:48.840 00,56,79,11,96,00,00,01,37,00,00,00,07,00,00,00,00,00,00,00,00,00,1F,01,FF,
< 2016-01-07 14:46:48.840 00,00,00,1C,56,4F,52,44,45,46,49,4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,
< 2016-01-07 14:46:48.840 72,61,74,6F,72,65,6E,00,00,00,00,00,00,00,0B,00,00,00,00,00,00,00,1C,56,4F,
< 2016-01-07 14:46:48.840 52,44,45,46,49,4E,49,45,52,54,5C,41,64,6D,69,6E,69,73,74,72,61,74,6F,72,65,
< 2016-01-07 14:46:48.840 6E,00,00,00,00,00,00,00,00,00,1F,01,FF,00,00,00,14,4E,54,2D,41,55,54,4F,52,
< 2016-01-07 14:46:48.840 49,54,C3,84,54,5C,53,59,53,54,45,4D,00,00,00,00,00,00,00,0B,00,00,00,00,00,
< 2016-01-07 14:46:48.840 00,00,14,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,53,59,53,54,45,4D,00,00,
< 2016-01-07 14:46:48.840 00,00,00,00,00,03,00,12,00,A9,00,00,00,15,56,4F,52,44,45,46,49,4E,49,45,52,
< 2016-01-07 14:46:48.840 54,5C,42,65,6E,75,74,7A,65,72,00,00,00,00,00,00,00,00,00,13,01,BF,00,00,00,
< 2016-01-07 14:46:48.840 27,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,41,75,74,68,65,6E,74,69,66,69,
< 2016-01-07 14:46:48.840 7A,69,65,72,74,65,20,42,65,6E,75,74,7A,65,72,00,00,00,00,00,00,00,0B,00,01,
< 2016-01-07 14:46:48.840 00,00,00,00,00,27,4E,54,2D,41,55,54,4F,52,49,54,C3,84,54,5C,41,75,74,68,65,
< 2016-01-07 14:46:48.841 6E,74,69,66,69,7A,69,65,72,74,65,20,42,65,6E,75,74,7A,65,72,
> 2016-01-07 14:46:48.841 Type: SSH_FXP_READDIR, Size: 41, Number: 5644
> 2016-01-07 14:46:48.841 0C,00,00,16,0C,00,00,00,20,30,61,33,38,32,30,37,31,37,64,61,65,34,34,39,61,
> 2016-01-07 14:46:48.841 30,31,66,36,32,65,35,61,33,34,65,34,30,33,39,34,
. 2016-01-07 14:46:48.841 Sent 45 bytes
. 2016-01-07 14:46:48.841 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:48.841 Looking for network events
. 2016-01-07 14:46:48.841 Timeout waiting for network events
. 2016-01-07 14:46:48.841 Read file '.' from listing
. 2016-01-07 14:46:48.841 Read file '..' from listing
. 2016-01-07 14:46:48.841 Waiting for another 4 bytes
. 2016-01-07 14:46:48.841 Looking for incoming data
. 2016-01-07 14:46:48.841 Looking for network events
. 2016-01-07 14:46:48.841 Detected network event
. 2016-01-07 14:46:48.841 Enumerating network events for socket 1084
. 2016-01-07 14:46:48.841 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:48.841 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:48.841 Received 46 bytes (0)
. 2016-01-07 14:46:48.841 Read 4 bytes (42 pending)
. 2016-01-07 14:46:48.841 Read 42 bytes (0 pending)
< 2016-01-07 14:46:48.841 Type: SSH_FXP_STATUS, Size: 42, Number: 5644
< 2016-01-07 14:46:48.841 65,00,00,16,0C,00,00,00,01,00,00,00,19,44,69,72,65,63,74,6F,72,79,20,72,65,
< 2016-01-07 14:46:48.841 61,64,69,6E,67,20,69,73,20,64,6F,6E,65,00,00,00,00,
< 2016-01-07 14:46:48.842 Status code: 1
> 2016-01-07 14:46:48.842 Type: SSH_FXP_CLOSE, Size: 41, Number: 5892
> 2016-01-07 14:46:48.842 04,00,00,17,04,00,00,00,20,30,61,33,38,32,30,37,31,37,64,61,65,34,34,39,61,
> 2016-01-07 14:46:48.842 30,31,66,36,32,65,35,61,33,34,65,34,30,33,39,34,
. 2016-01-07 14:46:48.842 Sent 45 bytes
. 2016-01-07 14:46:48.842 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:48.842 Looking for network events
. 2016-01-07 14:46:48.842 Timeout waiting for network events
. 2016-01-07 14:46:48.842 ..;D;0;2015-12-22T09:02:14.000Z;"" [0];"" [0];rw-rw-rw-;1
. 2016-01-07 14:46:49.283 Session upkeep
. 2016-01-07 14:46:49.283 Looking for network events
. 2016-01-07 14:46:49.283 Detected network event
. 2016-01-07 14:46:49.283 Enumerating network events for socket 1084
. 2016-01-07 14:46:49.283 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:49.283 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:49.283 Received 21 bytes (0)
. 2016-01-07 14:46:49.472 Cached directory change via ".." to "/".
. 2016-01-07 14:46:49.472 Getting current directory name.
. 2016-01-07 14:46:49.473 Directory content loaded from cache.
. 2016-01-07 14:46:49.795 Session upkeep
. 2016-01-07 14:46:49.795 Looking for network events
. 2016-01-07 14:46:49.795 Timeout waiting for network events
. 2016-01-07 14:46:49.880 Cached directory change via "upload" to "/upload".
. 2016-01-07 14:46:49.880 Getting current directory name.
. 2016-01-07 14:46:49.881 Listing directory "/upload".
> 2016-01-07 14:46:49.881 Type: SSH_FXP_OPENDIR, Size: 16, Number: 6155
> 2016-01-07 14:46:49.881 0B,00,00,18,0B,00,00,00,07,2F,75,70,6C,6F,61,64,
. 2016-01-07 14:46:49.881 Sent 20 bytes
. 2016-01-07 14:46:49.881 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:49.881 Looking for network events
. 2016-01-07 14:46:49.882 Timeout waiting for network events
. 2016-01-07 14:46:49.882 Read 4 bytes (17 pending)
. 2016-01-07 14:46:49.882 Read 17 bytes (0 pending)
< 2016-01-07 14:46:49.882 Type: SSH_FXP_STATUS, Size: 17, Number: 5892
< 2016-01-07 14:46:49.882 65,00,00,17,04,00,00,00,00,00,00,00,00,00,00,00,00,
. 2016-01-07 14:46:49.882 Discarding reserved response
. 2016-01-07 14:46:49.882 Waiting for another 4 bytes
. 2016-01-07 14:46:49.882 Looking for incoming data
. 2016-01-07 14:46:49.882 Looking for network events
. 2016-01-07 14:46:49.882 Detected network event
. 2016-01-07 14:46:49.882 Enumerating network events for socket 1084
. 2016-01-07 14:46:49.883 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:49.883 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:49.883 Received 45 bytes (0)
. 2016-01-07 14:46:49.883 Read 4 bytes (41 pending)
. 2016-01-07 14:46:49.883 Read 41 bytes (0 pending)
< 2016-01-07 14:46:49.883 Type: SSH_FXP_HANDLE, Size: 41, Number: 6155
< 2016-01-07 14:46:49.883 66,00,00,18,0B,00,00,00,20,30,38,61,36,35,34,38,66,61,36,39,63,66,31,64,37,
< 2016-01-07 14:46:49.883 65,31,33,34,32,33,63,32,61,30,32,30,35,33,63,37,
> 2016-01-07 14:46:49.883 Type: SSH_FXP_READDIR, Size: 41, Number: 6412
> 2016-01-07 14:46:49.883 0C,00,00,19,0C,00,00,00,20,30,38,61,36,35,34,38,66,61,36,39,63,66,31,64,37,
> 2016-01-07 14:46:49.883 65,31,33,34,32,33,63,32,61,30,32,30,35,33,63,37,
. 2016-01-07 14:46:49.883 Sent 45 bytes
. 2016-01-07 14:46:49.883 There are 0 bytes remaining in the send buffer
. 2016-01-07 14:46:49.883 Looking for network events
. 2016-01-07 14:46:49.883 Timeout waiting for network events
. 2016-01-07 14:46:49.883 Waiting for another 4 bytes
. 2016-01-07 14:46:49.883 Looking for incoming data
. 2016-01-07 14:46:49.883 Looking for network events
. 2016-01-07 14:46:49.889 Detected network event
. 2016-01-07 14:46:49.890 Enumerating network events for socket 1084
. 2016-01-07 14:46:49.890 Enumerated 1 network events making 1 cumulative events for socket 1084
. 2016-01-07 14:46:49.890 Handling network read event on socket 1084 with error 0
. 2016-01-07 14:46:49.890 Received 720 bytes (0)
. 2016-01-07 14:46:49.890 Read 4 bytes (716 pending)
. 2016-01-07 14:46:49.890 Read 716 bytes (0 pending)

问候

问题已在 Apache Mina SSHD 1.1.0 中解决,参见


保留早期版本的解决方案:

Mina SSHD 服务器和 FileZilla 客户端都有部分问题。

在 SFTP 版本 3(FileZilla 使用)中,每个文件的条目都包含结构化元数据和 display-only 字符串(又名 longname 字段),其格式与*nix ls -l 命令。 display-only 字符串不应被解析。

但 FileZilla 会解析它,而不是使用结构化元数据(文件时间戳除外)。 FileZilla 用于实施 SFTP 协议的内部 psftp 进程仅向父 FileZilla 进程(sftp_cmd_ls 函数)提供此信息:

if (ournames[i]->attrs.flags & SSH_FILEXFER_ATTR_ACMODTIME) {
    mtime = ournames[i]->attrs.mtime;
}
fzprintf(sftpListentry, "%lu %s", mtime, ournames[i]->longname);

米娜SSHD/SFTP(SftpSubsystemclass),在列出...meta-directories时,错误地使用了电流display-only 字符串中的文件夹名称和父文件夹名称,而不是 ...。它在结构化元数据(shortname 字段)中正确使用 ...


FileZilla 从列表中读取了错误的名称并感到困惑,将条目视为实际的子目录条目,而不是 meta-directories。

在根目录中,...可能都列为/。 FileZilla 修剪所有内容,直到最后一个 /,导致空条目(并且两个 same-named [empty-named] 条目可能合并为一个)。

所以不用

.
..
upload
download

FileZilla 看到

/ [treated as an empty string]
/ [treated as an empty string and ignored as duplicate]
upload
download   

upload 目录中,. 被列为 upload.. 被列为 /(导致空条目)。

所以不用

.
..

FileZilla 看到

upload
/ [treated as an empty string]

WinSCP 相反,从不使用 display-only 字符串来解析 file/directory 名称。并且主要(如果服务器支持,Mina SSHD 所做的)使用 SFTP 版本 4,它甚至不包括 display-only 字符串。


要解决此问题,您需要将 SftpSubsystem.writeDirEntry 方法的 shortName 参数传递给被调用的 .getLongName 方法。并修改 .getLongName 以在字符串中使用 shortName returns 而不是 getShortName(f).

请参阅下面的 SftpSubsystem 修改代码,其中包含描述更改的注释。代码来自Mina SSHD version 1.0

protected void writeDirEntry(int id, DirectoryHandle dir, Buffer buffer, int index, Path f, String shortName, LinkOption... options) throws IOException {
   ...
    if (version == SFTP_V3) {
        // added shortName argument
        String longName = getLongName(f, options, shortName);
    } else {
    ...
}

// added shortName parameter
protected String getLongName(Path f, LinkOption... options, String shortName) throws IOException {
    // added shortName argument
    return getLongName(f, true, options, shortName);
}

// added shortName parameter
private String getLongName(Path f, boolean sendAttrs, LinkOption... options, String shortName) throws IOException {
    ...
    // added shortName argument
    return getLongName(f, attributes, shortName);
}

// added shortName parameter
private String getLongName(Path f, Map<String, ?> attributes, String shortName) throws IOException {
    ...
    return (SftpHelper.getBool(isDirectory) ? "d" : (SftpHelper.getBool(isLink) ? "l" : "-"))
            + PosixFilePermissions.toString(perms) + "  "
            + (attributes.containsKey("nlink") ? attributes.get("nlink") : "1")
            + " " + username + " " + group + " " + lengthString + " "
            + UnixDateFormat.getUnixDate((FileTime) attributes.get("lastModifiedTime"))
            // using shortName instead of getShortName(f) 
            + " " + shortName;
}

// + you need to modify sendPath to pass getShortName(f) 
//   to its call to getLongName

我不会Java,所以请原谅任何错误的代码。


考虑将错误报告给 Mina SSHD 项目。 Link这里的问题,如果你这样做。