Secure FTP with org.apache.commons.net.ftp.FTPClient

穿精又带淫゛_ 提交于 2019-11-27 05:43:33

问题


Is there a way I can implement a secure FTP with org.apache.commons.net.ftp.FTPClient?

If not, what are other options for Java?


回答1:


You can use org.apache.commons.net.ftp.FTPSClient instead of org.apache.commons.net.ftp.FTPClient to have secure ftp http://commons.apache.org/proper/commons-net/apidocs/org/apache/commons/net/ftp/FTPSClient.html




回答2:


First, make sure you understand a difference between FTPS (Secure FTP) and SFTP:
FTPS versus SFTP versus SCP


  • If you need FTPS (aka Secure FTP or FTP over TLS/SSL), you can use FTPSClient class from Apache Commons library instead of FTPClient.

  • If you need SFTP (over SSH), you need a different library. See:
    How to retrieve a file from a server via SFTP? or
    Java SFTP Transfer Library.




回答3:


Apache FTPClient doesn't support SFTP at the moment. However, you can use JSch - Java Secure Channel.

Onkar Joshi goes into more details of the library to use for FTP, SFTP, FTPS file transfer in Java.

An example of using JSch to transfer files with SFTP is as follows:

    ...

private static final Logger logger = Logger.getLogger(YourClass.class.getName());

public boolean sendDataViaSFTP(String contents) throws Exception {
    String hostname = "<FTP hostname/IP>";
    String username = "<FTP username>";
    String password = "<FTP password>";
    String remoteDirectory = "<FTP remote directory>";
    int ftpPort = 22;

    logger.info("***   Creating FTP session.   ***");
    JSch jsch = new JSch();
    Session session = null;
    Channel channel = null;
    ChannelSftp c = null;

    //Now connect and SFTP to the SFTP Server
    try {
        //Create a session sending through our username and password
        session = jsch.getSession(username, hostname, ftpPort);
        logger.info("***   FTP Session created.   ***");
        session.setPassword(password);

        //Security.addProvider(new com.sun.crypto.provider.SunJCE());
        //Setup Strict HostKeyChecking to no so we dont get the
        //unknown host key exception
        Properties config = new Properties();
        config.put("StrictHostKeyChecking", "no");
        session.setConfig(config);
        session.connect();
        logger.info("***   Session connected.   ***");

        //Open the SFTP channel
        logger.info("***   Opening FTP Channel.   ***");
        channel = session.openChannel("sftp");
        channel.connect();
        c = (ChannelSftp) channel;

        //Change to the remote directory
        logger.info("***   Changing to FTP remote dir: " + remoteDirectory + "   ***");
        c.cd(remoteDirectory);

        //Send the file we generated
        try {
            String filename = "myfile.txt";

            logger.info("***   Storing file as remote filename: " + filename + "   ***");

            ByteArrayInputStream bis = new ByteArrayInputStream(contents.getBytes());
            c.put(bis, filename);
            return true;
        } catch (Exception e) {
            logger.info("***   Storing remote file failed. " + e.toString() + "   ***");
            throw e;
        }
    } catch (Exception e) {
        logger.info("***   Unable to connect to FTP server. " + e.toString() + "   ***");
        throw e;
    } finally {
        //
        //Disconnect from the FTP server
        //
        try {
            if(session != null)
                session.disconnect();

            if(channel != null)
                channel.disconnect();

            if(c != null)
                c.quit();
        } catch (Exception exc) {
            logger.severe("***   Unable to disconnect from FTP server. " + exc.toString()+"   ***");
        }

        logger.info("***   SFTP Process Complete.   ***");
    }

}

...



回答4:


Try Java Secure Channel

It supports SFTP

http://www.jcraft.com/jsch/

Example can be found here




回答5:


How about trying Apache Camel,

http://camel.apache.org/ftp2.html



来源:https://stackoverflow.com/questions/12803942/secure-ftp-with-org-apache-commons-net-ftp-ftpclient

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!