SFTP上传文件权限被拒绝

9 spring sftp jsch spring-boot spring-integration-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();
        }
    }
Run Code Online (Sandbox Code Playgroud)

但每次我运行这个应用程序时,我都会收到错误消息:

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)
Run Code Online (Sandbox Code Playgroud)

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

小智 8

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

我猜你有所有权限[R eading,w ^ riting,ē xecuting等在您的本地文件(“C:\工作区\上传文件\ test.xlsx”),但你的远程文件夹,“在/ var / WWW /文件夹” , 可能不接受您的应用程序的访问权限,包括“上传”操作。

解决方案:

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

ls -ld /var/www/folder
Run Code Online (Sandbox Code Playgroud)

如果你看到你的/ var / WWW /文件夹/目录不允许W¯¯ riting或[R eading(前的。drwxr-XR-X),对于普通用户,请权限授予该文件夹与follwing命令。

chmod 777 /var/www/folder
//check permission again.
ls -ld /var/www/folder
Run Code Online (Sandbox Code Playgroud)

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

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