首页 > 解决方案 > SFTP上传文件权限被拒绝

问题描述

我正在尝试使用 SFTP 将 excel 文件从本地 Windows PC 上传到 linux 机器。

这是我的代码:

private void uploadToSftp() {
        try
        {
            ChannelSftp sftpClient = null;
            Channel channel = null;
            JSch jsch = new JSch();
            Session session = jsch.getSession("username", "host", 22);
            session.setPassword("password");
            Properties config = new Properties();
            config.put("StrictHostKeyChecking","no");
            session.setConfig(config);
            session.connect();
            channel = session.openChannel("sftp");
            channel.connect();
            sftpClient = (ChannelSftp) channel;

            sftpClient.cd("/var/www/folder");
            File localFile = new File("C:\\Workspace\\upload-file\\test.xlsx");
            sftpClient.put(localFile.getAbsolutePath(),localFile.getName());

            sftpClient.disconnect();
            channel.disconnect();
            session.disconnect();
        } catch (JSchException e) {
            e.printStackTrace();  
        } catch (SftpException e) {
            e.printStackTrace();
        }
    }

但每次我运行这个应用程序我都会得到错误:

3: Permission denied
    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
    at com.jcraft.jsch.ChannelSftp._put(ChannelSftp.java:594)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:475)
    at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:365)

有谁知道可能是什么问题,我该如何解决?

标签: springspring-bootsftpjschspring-integration-sftp

解决方案


您似乎将本地文件“C:\Workspace\upload-file\test.xlsx”上传到 SFTP 上的远程目录“/var/www/folder”

我猜您对本地文件(“C:\Workspace\upload-file\test.xlsx” 具有读取、写入、执行等所有权限,但您的远程文件夹“/var/www/folder”,可能不接受您的应用程序的访问,包括“上传”操作。

解决方案:

解决此问题的最简单方法是授予所有用户在您的上传目标目录(“/var/www/folder”)中执行任何操作的所有权限。请尝试使用此 linux 命令检查上传文件夹的权限。

ls -ld /var/www/folder

如果您看到您的/var/www/folder/目录不允许普通用户写入或读取(例如: drwxr -xr-x),请使用以下命令授予此文件夹的权限。

chmod 777 /var/www/folder
//check permission again.
ls -ld /var/www/folder

如果您可以检查目标文件夹的权限是否足够(drwxrwxrwx),请再次运行您的应用程序。

注意: 将所有权限授予其他用户并不是一个好的做法。请只执行此解决方案进行测试,稍后更改适合您的规范的权限设置。更多详情,请查看此链接(点击)。


推荐阅读