Biblioteca de transferências SFTP Java [fechada]

Estou à procura de uma biblioteca Java simples morta para usar nas transferências de ficheiros SFTP. Não preciso de outras características para além disso.

Já experimentei Zehon's, mas é incrível, e acho que os arquivos 8 jar são um pouco loucos por tão pouca funcionalidade quanto eu preciso.

e a biblioteca tem que ser livre (como na cerveja livre), e de código aberto preferível (não é um requisito).

Obrigado.

 15
Author: Valentin Rocher, 2010-02-27

4 answers

Edit: vou manter a minha resposta anterior, dado que o JSch ainda é usado em muitos locais, mas se precisar de uma biblioteca melhor documentada, poderá usar o sshj. Um exemplo de como usá-lo para fazer sftp é :

SSHClient ssh = new SSHClient();
ssh.loadKnownHosts();
ssh.connect("host");
try {
    ssh.authPassword("username", "password");
    SFTPClient sftp = ssh.newSFTPClient();
    try {
        sftp.put(new FileSystemFile("/path/of/local/file"), "/path/of/ftp/file");
    } finally {
        sftp.close();
    }
} finally {
    ssh.disconnect();
}

Usando JSch (uma lib java ssh, usada pelo Ant, por exemplo), você poderia fazer algo assim:

Session session = null;
Channel channel = null;
try {
    JSch ssh = new JSch();
    ssh.setKnownHosts("/path/of/known_hosts/file");
    session = ssh.getSession("username", "host", 22);
    session.setPassword("password");
    session.connect();
    channel = session.openChannel("sftp");
    channel.connect();
    ChannelSftp sftp = (ChannelSftp) channel;
    sftp.put("/path/of/local/file", "/path/of/ftp/file");
} catch (JSchException e) {
    e.printStackTrace();
} catch (SftpException e) {
    e.printStackTrace();
} finally {
    if (channel != null) {
        channel.disconnect();
    }
    if (session != null) {
        session.disconnect();
    }
}

Aqui está outra ligação usando o JSch para fazer o SFTP.

Podes usar o JSch directamente por aqui, ou através dos Comuns VFS , mas então você terá que ter ambos comuns VFS jar e jsch jar.

 31
Author: Valentin Rocher, 2017-06-05 08:43:48

Aqui está o código fonte completo de um exemplo usando JSch sem ter que se preocupar com a verificação da chave ssh.

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();  //To change body of catch statement use File | Settings | File Templates.
        } catch (SftpException e) {
            e.printStackTrace();
        }
    }
}
 6
Author: Iraklis, 2010-04-22 13:02:16

A saída() e o desconectamento() devem ser colocados num bloco final. Neste exemplo, temos um programa sem fim em caso de uma exceção porque um segundo tópico não terminará.

 3
Author: tg1, 2012-03-13 12:44:21

Que tal FTPSClient do Apache Commons?

 -3
Author: Konrad Garus, 2010-02-27 16:48:51