web-dev-qa-db-fra.com

FTP sécurisé avec org.Apache.commons.net.ftp.FTPClient

Existe-t-il un moyen de mettre en œuvre un FTP sécurisé avec org.Apache.commons.net.ftp.FTPClient?

Sinon, quelles sont les autres options pour Java?

20
user1725253

Vous pouvez utiliser org.Apache.commons.net.ftp. FTPSClient au lieu de org.Apache.commons.net.ftp. FTPClient pour avoir un ftp sécurisé http://commons.Apache.org/proper/commons-net/apidocs/org/Apache/commons/net/ftp/FTPSClient .html

18
user1464713

Tout d'abord, assurez-vous de bien comprendre la différence entre FTPS (Secure FTP) et SFTP:
FTPS contre SFTP contre SCP


34
Martin Prikryl

Apache FTPClient ne prend pas en charge SFTP pour le moment. Cependant, vous pouvez utiliser JSch - Java Secure Channel.

Onkar Joshi donne plus de détails sur la bibliothèque à utiliser pour le transfert de fichiers FTP, SFTP, FTPS en Java.

Un exemple d'utilisation de JSch pour transférer des fichiers avec SFTP est le suivant:

    ...

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
Babatunde Adeyemi

Essayez Java Secure Channel

Il prend en charge SFTP

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

Un exemple peut être trouvé ici

4
crunchBar

Que diriez-vous d'essayer Apache Camel,

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

2
ymnk