Transferir ficheros por SFTP con Java | DevTroce.com

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:

Etiquetas: , , ,

Comentario

Un Comentario en “Transferir ficheros por SFTP con Java” Hasta el momento.

  1. Sutano Sutano COLOMBIA Mozilla Firefox Windows dice:

    Excelente, me sirvio muchisimo

Escribenos tu Comentario

Sigue los comentarios por RSS, suscribete a los feeds del comentario.