Estoy tratando de recuperar un archivo de un servidor usando SFTP (a diferencia de FTPS) usando Java. ¿Cómo puedo hacer esto?
228
Otra opción es considerar mirar la biblioteca JSch . JSch parece ser la biblioteca preferida para algunos grandes proyectos de código abierto, incluidos Eclipse, Ant y Apache Commons HttpClient, entre otros.
Admite muy bien los inicios de sesión de usuario / pase y certificados, así como todas las otras características SSH2 deliciosas.
Aquí hay una simple recuperación remota de archivos a través de SFTP. El manejo de errores se deja como un ejercicio para el lector :-)
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" );
// OR
InputStream in = sftpChannel.get( "remote-file" );
// process inputstream as needed
sftpChannel.exit();
session.disconnect();
Aquí está el código fuente completo de un ejemplo usando JSch sin tener que preocuparse por la comprobación de la clave ssh.
fuente
finally
debe usar un bloque para incluir el código de limpieza del canal, para garantizar que siempre se ejecute.com.jcraft.jsch.JSchException: Session.connect: java.security.InvalidAlgorithmParameterException: Prime size must be multiple of 64, and can only range from 512 to 2048 (inclusive)
A continuación se muestra un ejemplo usando Apache Common VFS:
fuente
Esta fue la solución que se me ocurrió http://sourceforge.net/projects/sshtools/ (la mayoría de los errores se omiten para mayor claridad). Este es un extracto de mi blog.
fuente
Una buena abstracción sobre Jsch es Apache commons-vfs, que ofrece una API de sistema de archivos virtual que hace que el acceso y la escritura de archivos SFTP sean casi transparentes. Funcionó bien para nosotros.
fuente
Hay una buena comparación de las 3 bibliotecas Java maduras para SFTP: Commons VFS, SSHJ y JSch
En resumen, SSHJ tiene la API más clara y es la mejor de ellas si no necesita otro soporte de almacenamiento proporcionado por Commons VFS.
Aquí está el ejemplo editado SSHJ de github :
fuente
Archivo de propiedades de Java común para todos los ejemplos
serverAddress = 111.222.333.444
userId = myUserId
contraseña = myPassword
remoteDirectory = productos /
localDirectory = importar /
fuente
hierynomus / sshj tiene una implementación completa de SFTP versión 3 (lo que implementa OpenSSH)
Código de ejemplo de SFTPUpload.java
fuente
La biblioteca JSch es la biblioteca poderosa que se puede usar para leer archivos del servidor SFTP. A continuación se muestra el código probado para leer el archivo de la ubicación SFTP línea por línea
Por favor, consulte el blog para todo el programa.
fuente
Andy, para eliminar el archivo en el sistema remoto, debes usar
(channelExec)
JSch y pasar los comandos unix / linux para eliminarlo.fuente
Pruebe edtFTPj / PRO , una biblioteca cliente SFTP madura y robusta que admite agrupaciones de conexiones y operaciones asincrónicas. También es compatible con FTP y FTPS, por lo que todas las bases para la transferencia segura de archivos están cubiertas.
fuente
Encontré un ejemplo de trabajo completo para SFTP en Java usando JSCH API http://kodehelp.com/java-program-for-uploading-file-to-sftp-server/
fuente
Aunque las respuestas anteriores fueron muy útiles, pasé un día para que funcionen, enfrentando varias excepciones como "canal roto", "clave rsa desconocida" y "paquete corrupto".
A continuación se muestra una clase reutilizable de trabajo para la carga / descarga de archivos SFTP utilizando la biblioteca JSch.
Subir uso:
Uso de descarga:
El código de clase:
fuente
También tiene JFileUpload con complemento SFTP (Java también): http://www.jfileupload.com/products/sftp/index.html
fuente
Utilizo esta API SFTP llamada Zehon, es genial, muy fácil de usar con una gran cantidad de código de muestra. Aquí está el sitio http://www.zehon.com
fuente
La mejor solución que he encontrado es Paramiko . Hay una versión de Java.
fuente