我正在尝试使用JSch从sftp服务器检索一些文件,但是出现以下错误。
ls: cannot access /export/user-docs/adminuser/record/WAQ12.txt: No such file or directory
3: Permission denied, file: /opt/ftp/pub/new_waq_std/WAQ12.txt
@at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2873)
@at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:768)
@at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:709)
@at com.jcraft.jsch.ChannelSftp.put(ChannelSftp.java:703)
代码如下:
class WSFTPFile {
static WSFTPFile ftpFile =null;
private static ChannelSftp sftp;
private static Session jschSession;
WSDBTool dbTool= null;
boolean stickyCRLF=false;
boolean seenCR=false;
public static WSFTPFile getInstance(){
if (ftpFile == null)
ftpFile = new WSFTPFile();
return ftpFile;
}
public void performFTP(Vector<String> v) throws Exception {
/*SFTP Coding start */
int authResult = -1;
JSch jsch = new JSch();
try{
jsch.addIdentity(dbTool.getSourceDirectory()
+ "id_rsa_1234.wsadmin");
jschSession = (Session) jsch.getSession(dbTool.getFTPUserName(),
dbTool.getFTPIP(), 22);
Properties config = new Properties();
config.put("StrictHostKeyChecking", "no");
jschSession.setConfig(config);
jschSession.connect();
System.out.println("Host connected.");
}catch(Exception e) {
System.out.println("Exception in connecting to SFTP server.");
e.printStackTrace();
}
// SftpClient sftp;
System.out.println("authResult:" + authResult);
if (jschSession.isConnected()) {
try{
sftp = (ChannelSftp)jschSession.openChannel("sftp") ;
sftp.connect();
//sftp = sshClient.openSftpClient();
sftp.lcd(dbTool.getSourceDirectory());
sftp.cd(dbTool.getFileDirectory());
sftp.put(dbTool.getSourceDirectory()+dbTool.getFileName(),dbTool.getFileName(),ChannelSftp.OVERWRITE);
if(sftp != null) {
sftp.disconnect();
sftp.quit();
sftp = null;
}
System.out.println("Successfully connected to ws SFTP area..");
}catch(Exception e){
System.out.println("Exception in SFTP put.");
e.printStackTrace();
}
}else{
System.out.println("Error connecting SFTP server.");
}
if(jschSession != null){
jschSession.disconnect();
jschSession = null;
}
/*SFTP Coding END*/
System.out.println("File sent to ws via SFTP");
}
}
以下是我在ftp目录中运行ls -alF时得到的内容:-
-rw-r--r-- 1 ssrftp ssssftp 3135 5月16日17:00 WAQ12.txt
但是我现有的WAQ12.txt在ftp位置大约有2个月大了,在尝试执行ftp时会出现上述错误。文件日期重要吗?任何想法? 注:-为了进行测试,我删除了/export/user-docs/adminuser/record/WAQ12.txt位置中的现有WAQ12.txt并运行了我的程序,它运行正常,并在ftp位置中填充了WAQ12.txt文件,再次,当我运行程序时,它确实覆盖了先前的WAQ12.txt,并且时间戳得到了更新。
但是我不想这么做,我希望在运行程序时,以前的WAQ12.txt(已存在2个月)文件被新文件覆盖,但是我仍然收到上述错误。有想法吗?
答案 0 :(得分:-1)
确保ftp用户也对该目录具有写权限。替换现有文件时,put命令首先删除然后上传有问题的文件。如果您对目录没有写权限,则删除部分将失败。
使用chmod
命令更改权限。为了进行测试,您可以尝试sudo chmod a+w .
授予所有用户对该目录的写权限。如果可行,请将权限设置调整到尽可能小的范围,例如只有组文本sftp用户属于。