SSHD:获取readonly文件的内容

时间:2018-03-12 12:37:06

标签: java nio apache-mina

在我的远程服务器上,我有一个只读的文件。

$ echo "Hello World" > /tmp/dummyfile && chmod a-w,a-x /tmp/dummyfile && ls -l /tmp/dummyfile
-r--r--r-- 1 dummyuser users 12 Mär 12 12:12 /tmp/dummyfile

我想使用Apache Mina SSHD通过Java NIO API访问我的远程服务器,如下所示:

SftpFileSystemProvider provider = new SftpFileSystemProvider(sshClient);
try (FileSystem fileSystem = provider.newFileSystem(uri, Collections.emptyMap())) {

    Path path = fileSystem.getPath("/tmp/dummyfile");
    byte[] bytes = Files.readAllBytes(path);
    // ...
}

当我尝试读取一个只读文件(如上所述)时,我得到一个异常。

Exception in thread "main" SFTP error (SSH_FX_PERMISSION_DENIED): Permission denied
    at org.apache.sshd.client.subsystem.sftp.impl.AbstractSftpClient.throwStatusException(AbstractSftpClient.java:210)
    at org.apache.sshd.client.subsystem.sftp.impl.AbstractSftpClient.checkHandleResponse(AbstractSftpClient.java:245)
    at org.apache.sshd.client.subsystem.sftp.impl.AbstractSftpClient.checkHandle(AbstractSftpClient.java:225)
    at org.apache.sshd.client.subsystem.sftp.impl.AbstractSftpClient.open(AbstractSftpClient.java:665)
    at org.apache.sshd.client.subsystem.sftp.SftpFileSystem$Wrapper.open(SftpFileSystem.java:284)
    at org.apache.sshd.client.subsystem.sftp.SftpRemotePathChannel.<init>(SftpRemotePathChannel.java:77)
    at org.apache.sshd.client.subsystem.sftp.SftpFileSystemChannel.<init>(SftpFileSystemChannel.java:35)
    at org.apache.sshd.client.subsystem.sftp.SftpFileSystemChannel.<init>(SftpFileSystemChannel.java:31)
    at org.apache.sshd.client.subsystem.sftp.SftpFileSystemProvider.newFileChannel(SftpFileSystemProvider.java:423)
    at org.apache.sshd.client.subsystem.sftp.SftpFileSystemProvider.newByteChannel(SftpFileSystemProvider.java:413)
    at org.apache.sshd.client.subsystem.sftp.SftpFileSystemProvider.newByteChannel(SftpFileSystemProvider.java:95)
    at java.nio.file.Files.newByteChannel(Files.java:361)
    at java.nio.file.Files.newByteChannel(Files.java:407)
    at java.nio.file.Files.readAllBytes(Files.java:3152)
    at test.Main.main(Main.java:36)

抛出异常是因为SftpFileSystemProvider.newFileChannel打开了具有读写权限的文件(请参阅SftpFileSystemProvider.java:420),但用户没有写入权限。

如何使用Java NIO和Apache Mina SSHD读取readonly文件的文件内容?

0 个答案:

没有答案