Ravi Kalla
asked on
JSCH libraries asking for Kerberos username and password
I am trying to download a file from a remote file server to my local. I pasted the code at the end of this question. I am getting command prompts as below -
Even if I enter values for above queries, I am getting FileNotFound error. How can I fix it?
Kerberos username [kalla]: USER1
Kerberos password for test: PWD
Even if I enter values for above queries, I am getting FileNotFound error. How can I fix it?
CODE:
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import org.apache.commons.vfs2.FileObject;
import org.apache.commons.vfs2.FileSystemOptions;
import org.apache.commons.vfs2.Selectors;
import org.apache.commons.vfs2.impl.StandardFileSystemManager;
import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder;
public class GetMyFiles {
static Properties props;
public static void main(String[] args) {
GetMyFiles getMyFiles = new GetMyFiles();
String propertiesFilename = "C:\\Users\\USER1\\workspace\\Test\\src\\Config.properties";
String fileToDownload = "FileToBeDownloaded.txt";
getMyFiles.startFTP(propertiesFilename, fileToDownload);
}
public boolean startFTP(String propertiesFilename, String fileToDownload) {
props = new Properties();
StandardFileSystemManager manager = new StandardFileSystemManager();
try {
props.load(new FileInputStream(propertiesFilename));
String serverAddress = props.getProperty("serverAddress").trim();
String userId = props.getProperty("userId").trim();
String password = props.getProperty("password").trim();
String remoteDirectory = props.getProperty("remoteDirectory").trim();
String localDirectory = props.getProperty("localDirectory").trim();
// Initializes the file manager
manager.init();
// Setup our SFTP configuration
FileSystemOptions opts = new FileSystemOptions();
SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(opts, "no");
SftpFileSystemConfigBuilder.getInstance().setUserDirIsRoot(opts, true);
SftpFileSystemConfigBuilder.getInstance().setTimeout(opts, 10000);
// Create the SFTP URI using the host name, userid, password, remote
// path and file name
String sftpUri = "sftp://" + userId + ":" + password + "@"
+ serverAddress + "/" + remoteDirectory + fileToDownload;
// Create local file object
String filepath = localDirectory + fileToDownload;
File file = new File(filepath);
FileObject localFile = manager.resolveFile(file.getAbsolutePath());
// Create remote file object
FileObject remoteFile = manager.resolveFile(sftpUri, opts);
// Copy local file to sftp server
localFile.copyFrom(remoteFile, Selectors.SELECT_SELF);
System.out.println("File download successful");
} catch (Exception ex) {
ex.printStackTrace();
return false;
} finally {
manager.close();
}
return true;
}
}
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
This is the solution that worked for me.
In case of JSCH, the imports should be like given below:
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSft
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
If you are looking for an example to download a file using SFTP protocol, refer below links.
1. http://www.jcraft.com/jsch/examples/Sftp.java.html (This is homepage for JSCH api developers and good example is already given)
2. http://kodehelp.com/java-program-for-downloading-file-from-sftp-server/ (Admin will not allow this, if it is violating a policy.)