我试图使用JSch从sftp服务器检索一些文件,但我得到以下错误。
3: Permission denied
at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2846)
at com.jcraft.jsch.ChannelSftp._realpath(ChannelSftp.java:2340)
at com.jcraft.jsch.ChannelSftp.cd(ChannelSftp.java:342)
at com.company.common.sftp.impl.managedFile.moveFiles(managedFile.java:712)
下面是代码:
private List<String> moveFiles(String prefixFileName, String path) {
Session session = getSession();
Channel channel = connect(session);
ChannelSftp channelSftp = null;
try {
channelSftp = (ChannelSftp)channel;
channelSftp.cd(_workingDir);
...
}
...
finally {
channel.disconnect();
session.disconnect();
}
}
public Session getSession() {
Session session = null;
JSch jsch = new JSch();
session = jsch.getSession(_user,_server,_port);
session.setPassword(_password);
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", _strictHostKeyChecking);
session.setConfig(config);
session.connect();
return session;
}
public static Channel connect(Session session) {
Channel channel = null;
channel = session.openChannel("sftp");
channel.connect();
return channel;
}
_workingDir
是具有以下值的属性:/user_files
。两个文件夹(源和目标)都在Windows服务器上,所有权限都授予了任何用户。但由于某种原因,它不允许我更改源(远程)服务器中的当前目录。
你知道吗?
- 更新:**Sftp服务器是freeFTPd,使用sftp客户端(如Filezilla),我可以毫无问题地移动文件
5条答案
按热度按时间vu8f3i0k1#
/user_files
可能是一个绝对路径。尝试使用
./user_files
获取用户主目录的相对路径。在Filezilla中,远程端是
C:\user_files
?mklgxw1f2#
在Docker容器中使用jsch时我也遇到了这个问题,在使用文件夹chowning并使用root启动sftp后修复了这个问题:
1.使用root用户启动应用程序,而不是其他用户,因为它将使用root用户拥有的目录“/var/run”;
1.由于(1),您应该有一个root拥有的路径作为数据路径,您最好给予该路径完全权限:chmod 777 /yourpath;
1.注意:使用“sftp -P 22 admin@127.0.0.1”登录sftp服务器时,应使用mkdir,而不要在数据路径中使用,因为数据路径将由root或其他系统用户拥有,而不是您的sftp系统中的用户,这样您就无法上传文件(因为权限被拒绝);
1.在更改了以上所有内容后,我终于可以在服务器上上传和下载文件了。
wmtdaxz33#
我也遇到了同样的问题,验证以下内容修复了我的问题:
1.我们尝试检索的文件的路径不存在。因此,请确保该文件确实存在于应用程序正在访问以检索该文件的目录下。
1.确保您在应用程序中用于建立连接的SFTP用户已在SFTP中配置并处于活动状态。
1.如果以上两点在您的场景中都有效,请在重新启动SFTP服务后尝试。
e7arh2l64#
同样的事情也发生在我身上。通过只添加服务器上的路由解决了这个问题。示例
示例
kkih6yb85#
假设您连接到C:/user_files/尝试读取/复制所有文件
确保C:/user_files/上不存在子文件夹,如果文件夹存在,则需要使用文件夹阅读遵循不同的方法。希望这对您有所帮助...