2015-10-20 116 views
2

我想從sftp服務器使用JSch檢索一些文件,但我收到以下錯誤。權限被拒絕使用JSch

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服務器上,並且所有權限都授予任何用戶。但由於某些原因,它不會讓我更改源(遠程)服務器中的當前目錄。

有什麼想法?

UPDATE: SFTP服務器是freeFTPd和使用SFTP客戶端(如FileZilla中)我可以移動的文件沒有問題

+0

您可以添加FileZilla窗口的屏幕截圖,顯示目錄'/ user_files'? –

回答

2

大概/user_files是絕對路徑。

嘗試./user_files獲取到用戶主目錄的相對路徑。

在Filezilla中,在遠程端是C:\user_files?被我遇到

+0

'user_files'文件夾不在遠程端。它試圖訪問一個不存在的文件夾。謝謝! –

0

相同的問題,並驗證以下固定我的問題:

  1. 我們正在試圖檢索不存在的文件的路徑。因此,請確保該文件實際存在於您的應用程序正在訪問的目錄下以檢索該文件。
  2. 確保您在應用程序中使用的用於建立連接的SFTP用戶在SFTP中已配置並處於活動狀態。
  3. 如果以上兩點都在您的方案中有效,那麼在重新啓動SFTP服務後嘗試。