为什么s3fs不能与Apache MINA SSHD像普通文件系统一样工作?

罗斯·德鲁

因此,我正在尝试创建一个Java SFTP服务器,该服务器充当Apache S3存储桶的前端。您可以通过SFTP连接并管理存储桶中的S3文件,就像它们是SFTP服务器上的文件一样。

我已经将Apache MINA(v1.2.0)用作SFTP服务器,使用SftpSubsystemFactory和默认值FileSystemFactory(提供本地文件系统)可以正常工作。
我选择了Amazon-S3-FileSystem-NIO2(v1.3.0)作为FileSystem,它使用了Apache AWS开发工具包,似乎是那里最好的选择。

public class S3FileSystemFactory implements FileSystemFactory {
    private URI uri = URI.create("localhost");

    public S3FileSystemFactory(URI uri){
        this.uri = uri;
    }

    public FileSystem createFileSystem(Session session) throws IOException {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        FileSystem s3FileSystem = FileSystems.newFileSystem(uri, new HashMap<String, Object>(), classLoader);
        return s3FileSystem;
    }
}

我只是将其设置FileSystemFactory为MINA的

SshServer sshd = SshServer.setUpDefaultServer();
sshd.setKeyPairProvider(buildHostKeyProviderFromFile(hostKeyType));
sshd.setPasswordAuthenticator(createPasswordAuthenticator());
sshd.setPublickeyAuthenticator(AcceptAllPublickeyAuthenticator.INSTANCE);
sshd.setSubsystemFactories(createSubsystemFactories());
sshd.setFileSystemFactory(createFileSystemFactory());

URI uri = URI.create("s3:///s3.amazonaws.com/my_bucket"); 
FileSystemFactory s3FileSystemFactory = new S3FileSystemFactory(uri);
sshd.setFileSystemFactory(s3FileSystemFactory);

我可以使用FileZilla / Command Line连接到该服务器,但是它会自动连接到ImageTransfer存储桶(不是my_bucket)。我可以导航到其他存储桶,甚至是子存储桶,但也无法显示内容,所有内容看起来都像一个空目录。

这可以通过FileSystem 我正在使用的方式完成,因为我可以列出目录内容,就像这样

    Path p = s3FileSystem.getPath("/my_bucket");
    String contents = "";
    try (DirectoryStream<Path> stream = Files.newDirectoryStream(p, "*")) {
        for (Path file : stream) {
            contents += "\n \t - " + file.getFileName();
        }
    } catch (IOException | DirectoryIteratorException x) {}

我一直在浏览s3fs,MINA和AWS代码(由于文档非常有限),但无法查明此问题的根源。谁能告诉我我在做什么错?

记录中

打开所有库的日志记录后,我只看到一个问题

"HEAD
application/x-www-form-urlencoded; charset=utf-8
Fri, 20 May 2016 09:58:07 GMT
/MYURL/."
2016-05-20 10:58:07.240 DEBUG 13323 --- [system-thread-1] c.a.http.impl.client.SdkHttpClient       : Stale connection check
2016-05-20 10:58:07.243 DEBUG 13323 --- [system-thread-1] c.a.http.impl.client.SdkHttpClient       : Attempt 1 to execute request
2016-05-20 10:58:07.434 DEBUG 13323 --- [system-thread-1] c.a.http.impl.client.SdkHttpClient       : Connection can be kept alive indefinitely
2016-05-20 10:58:07.435 DEBUG 13323 --- [system-thread-1] com.amazonaws.request                    : Received error response: com.amazonaws.services.s3.model.AmazonS3Exception: Not Found (Service: null; Status Code: 404; Error Code: 404 Not Found; Request ID: MYREQID), S3 Extended Request ID: MYEXTREQID
罗斯·德鲁

问题是双重的。

首先,Apache的MINA SSHD要求permission属性是本任何FileSystem它使用,这是很奇怪,因为这是如此明显一POSIX特定属性亚马逊-S3-文件系统NIO2没有提供它。

其次,Apache MINA SSHD在S3FileSystemProvider调用(并要求)一个未实现的方法,方法FileChannel

public FileChannel newFileChannel(Path path,
                                  Set<? extends OpenOption> options,
                                  FileAttribute<?>... attrs)

一个有问题的解决方案是将POSIX读/写权限硬编码到返回的S3属性中,并创建一个S3FileChannel简单地调用现有S3SeekableByteChannel上的方法的
这是我目前能想到的最好的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Apache Mina SSHD 1.0 Server立即退出

来自分类Dev

Apache Mina Sshd SetPasswordAuthenticator不执行

来自分类Dev

Apache Mina Sshd SetPasswordAuthenticator不执行

来自分类Dev

为什么管道函数像普通表函数一样工作?

来自分类Dev

Apache MINA SFTP示例

来自分类Dev

Apache Mina x Poodle错误

来自分类Dev

使用弹簧的Apache Mina连接

来自分类Dev

为什么我不能像普通变量一样绑定和重用haskell镜头?

来自分类Dev

为什么我不能像普通变量一样绑定和重用haskell镜头?

来自分类Dev

为什么不能像普通的数据CD一样仅“ dd” CD音频?

来自分类Dev

使用JSCH,Apache Mina sshd或sshj的Open SSH的SSH Exec通道

来自分类Dev

apache mina sshd对客户端签名进行身份验证

来自分类Dev

如何在Java中的Apache Mina Sshd Server中设置根目录

来自分类Dev

如何从远程计算机访问Apache Mina sshd SFTP服务器

来自分类Dev

如何在Apache Mina sshd-core版本0.14.0中覆盖getVirtualUserDir()

来自分类Dev

Python:And or 条件不能像 if else 一样正常工作

来自分类Dev

Apache Mina SFTP服务器端通道侦听器,用于接收文件

来自分类Dev

Apache Mina SFTP服务器端通道侦听器,用于接收文件

来自分类Dev

Apache Mina:如何编写一个 Http 服务器?

来自分类Dev

Apache Mina:调用connect时出现IllegalStateException

来自分类Dev

做“ mina setup”时什么也没发生

来自分类Dev

为什么不能像变量一样覆盖管道?

来自分类Dev

为什么JavaScript(jquery)if语句不能像php if语句一样工作?什么是解决方案?

来自分类Dev

更新标题:为什么ICommand.CanExecute总是被调用,而不是像事件一样工作?

来自分类Dev

为什么ggplotly无法像ggplot一样在rmarkdown中工作

来自分类Dev

为什么int8像char(C ++)一样工作(Visual Studio 2015)

来自分类Dev

为什么if($ row ['field'] == value)像SELECT WHERE field = value一样工作?

来自分类Dev

使筛选系统像Excel中一样的最佳逻辑是什么?

来自分类Dev

如何配置AWS S3以允许POST像GET一样工作

Related 相关文章

  1. 1

    Apache Mina SSHD 1.0 Server立即退出

  2. 2

    Apache Mina Sshd SetPasswordAuthenticator不执行

  3. 3

    Apache Mina Sshd SetPasswordAuthenticator不执行

  4. 4

    为什么管道函数像普通表函数一样工作?

  5. 5

    Apache MINA SFTP示例

  6. 6

    Apache Mina x Poodle错误

  7. 7

    使用弹簧的Apache Mina连接

  8. 8

    为什么我不能像普通变量一样绑定和重用haskell镜头?

  9. 9

    为什么我不能像普通变量一样绑定和重用haskell镜头?

  10. 10

    为什么不能像普通的数据CD一样仅“ dd” CD音频?

  11. 11

    使用JSCH,Apache Mina sshd或sshj的Open SSH的SSH Exec通道

  12. 12

    apache mina sshd对客户端签名进行身份验证

  13. 13

    如何在Java中的Apache Mina Sshd Server中设置根目录

  14. 14

    如何从远程计算机访问Apache Mina sshd SFTP服务器

  15. 15

    如何在Apache Mina sshd-core版本0.14.0中覆盖getVirtualUserDir()

  16. 16

    Python:And or 条件不能像 if else 一样正常工作

  17. 17

    Apache Mina SFTP服务器端通道侦听器,用于接收文件

  18. 18

    Apache Mina SFTP服务器端通道侦听器,用于接收文件

  19. 19

    Apache Mina:如何编写一个 Http 服务器?

  20. 20

    Apache Mina:调用connect时出现IllegalStateException

  21. 21

    做“ mina setup”时什么也没发生

  22. 22

    为什么不能像变量一样覆盖管道?

  23. 23

    为什么JavaScript(jquery)if语句不能像php if语句一样工作?什么是解决方案?

  24. 24

    更新标题:为什么ICommand.CanExecute总是被调用,而不是像事件一样工作?

  25. 25

    为什么ggplotly无法像ggplot一样在rmarkdown中工作

  26. 26

    为什么int8像char(C ++)一样工作(Visual Studio 2015)

  27. 27

    为什么if($ row ['field'] == value)像SELECT WHERE field = value一样工作?

  28. 28

    使筛选系统像Excel中一样的最佳逻辑是什么?

  29. 29

    如何配置AWS S3以允许POST像GET一样工作

热门标签

归档