Transferir ficheros por SFTP con Java
Diciembre 9, 2009. Por GeekZero. Categorizado en Java, Lenguajes de Programación, Redes. Un Comentario. Leido 1.332 veces.
No es muy común que nuestras aplicaciones necesiten hacer descargas o subidas de ficheros a otras máquinas, pero si llegamos a necesitarlo, podemos usar el protocolo SFTP (Secure File Transfer Protocol). Con este protocolo agregamos un nivel de seguridad comparado con el típico FTP.
Para lograr esto con Java, necesitamos de una librería externa que no viene incluido en el JDK, que nos proveerá JSch (Java Secure Channel). Pueden descargar la última versión de fichero aquí, luego tenemos que agregar con librería .jar externa en nuestro IDE, ya sea eclipse o NetBeans. JSch es utilizado en varias famosas aplicaciones como eclipse y NetBeans mismos, Jakarta, Ant, y otros.
Los imports necesarios son los siguientes:
1 2 3 4 5 6 7 8 | import java.io.BufferedOutputStream; import java.io.FileOutputStream; import java.io.OutputStream; import java.util.Properties; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.Session; |
El método es el siguiente, sólo muestro como hacer la descarga de los ficheros, para subirlos tan sólo hay que usar un poco de ingenio cambiando el metodo get por el set y usar un FileInput..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | public static void DescargarPorSFTP(String pUser, String pPass, String pHost, int pPort, String pOutputStream, String pPathFile) throws Exception { JSch sftp = new JSch(); // Instancio el objeto session para la transferencia Session session = null; // instancio el canal sftp ChannelSftp channelSftp = null; try { // Inciciamos el JSch con el usuario, host y puerto session = sftp.getSession(pUser, pHost, pPort); // Seteamos el password session.setPassword(pPass); // El SFTP requiere un intercambio de claves // con esta propiedad le decimos que acepte la clave // sin pedir confirmación Properties prop = new Properties(); prop.put("StrictHostKeyChecking", "no"); session.setConfig(prop); session.connect(); // Abrimos el canal de sftp y conectamos channelSftp = (ChannelSftp) session.openChannel("sftp"); channelSftp.connect(); // Convertimos el archivo a transferir en un OutputStream OutputStream os = new BufferedOutputStream(new FileOutputStream( pOutputStream)); // Iniciamos la transferencia channelSftp.get(pPathFile, os); } catch (Exception e) { throw new Exception(e); } finally { // Cerramos el canal y session if (channelSftp.isConnected()) channelSftp.disconnect(); if (session.isConnected()) session.disconnect(); }// end try }// end DescargarPorSFTP public static void main(String[] args){ try { // El ejemplo es de una ejecucion Cliente Windows y Servidor Linux aunque esto no es relevante DescargarPorSFTP("miusuario", "clavesupersecreta", "192.168.1.100", 22, "C:\\devtroce.jpg", "/media/devtroce.jpg"); System.out.println("descarga satisfactoria..."); } catch (Exception e) { e.printStackTrace(); } } |
Articulos Relacionados:

en
en
Excelente, me sirvio muchisimo