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.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.
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();
}
}
}
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á.
Que tal FTPSClient do Apache Commons?