How to retrieve a file from a server via SFTP? How to retrieve a file from a server via SFTP? java java

How to retrieve a file from a server via SFTP?


Another option is to consider looking at the JSch library. JSch seems to be the preferred library for a few large open source projects, including Eclipse, Ant and Apache Commons HttpClient, amongst others.

It supports both user/pass and certificate-based logins nicely, as well as all a whole host of other yummy SSH2 features.

Here's a simple remote file retrieve over SFTP. Error handling is left as an exercise for the reader :-)

JSch jsch = new JSch();String knownHostsFilename = "/home/username/.ssh/known_hosts";jsch.setKnownHosts( knownHostsFilename );Session session = jsch.getSession( "remote-username", "remote-host" );    {  // "interactive" version  // can selectively update specified known_hosts file   // need to implement UserInfo interface  // MyUserInfo is a swing implementation provided in   //  examples/Sftp.java in the JSch dist  UserInfo ui = new MyUserInfo();  session.setUserInfo(ui);  // OR non-interactive version. Relies in host key being in known-hosts file  session.setPassword( "remote-password" );}session.connect();Channel channel = session.openChannel( "sftp" );channel.connect();ChannelSftp sftpChannel = (ChannelSftp) channel;sftpChannel.get("remote-file", "local-file" );// ORInputStream in = sftpChannel.get( "remote-file" );  // process inputstream as neededsftpChannel.exit();session.disconnect();


Here is the complete source code of an example using JSch without having to worry about the ssh key checking.

import com.jcraft.jsch.*;public class TestJSch {    public static void main(String args[]) {        JSch jsch = new JSch();        Session session = null;        try {            session = jsch.getSession("username", "127.0.0.1", 22);            session.setConfig("StrictHostKeyChecking", "no");            session.setPassword("password");            session.connect();            Channel channel = session.openChannel("sftp");            channel.connect();            ChannelSftp sftpChannel = (ChannelSftp) channel;            sftpChannel.get("remotefile.txt", "localfile.txt");            sftpChannel.exit();            session.disconnect();        } catch (JSchException e) {            e.printStackTrace();          } catch (SftpException e) {            e.printStackTrace();        }    }}


Below is an example using Apache Common VFS:

FileSystemOptions fsOptions = new FileSystemOptions();SftpFileSystemConfigBuilder.getInstance().setStrictHostKeyChecking(fsOptions, "no");FileSystemManager fsManager = VFS.getManager();String uri = "sftp://user:password@host:port/absolute-path";FileObject fo = fsManager.resolveFile(uri, fsOptions);