Java

Como conectarse a un servidor SFTP en Java

En este artículo vamos a ver como podemos conectarnos a un servidor SSH en Java. Para ello, mostrarmos como conectarse a un servidor SFTP, subir, descargar y eliminar ficheros utilizando la librería JSch.

SSH

SSH es un protocolo de red que utiliza cifrado, de forma que consigue ser seguro en un entorno inseguro.

JSCH

JSch es una librería escrita en Java que implementa SSH2. JSch permite conectarse a un servidor SSH y utilizar redirección de puertos, transferencia de ficheros, etc. A partir de la versión 1.4 de J2SE, solo es necesario añadir la dependencia para poder trabajar con JSch. Para ello nos descargaremos el jar desde aquí o añadimos la siguiente dependencia a nuestro proyecto.

<dependency>
   <groupId>com.jcraft</groupId>
   <artifactId>jsch</artifactId>
   <version>0.1.53</version>
</dependency>

 Realizar la conexión al servidor

Para conectarnos al servidor SFTP necesitaremos la ip o dirección del servidor, el puerto (que será el 22), el nombre de usuario y la contraseña. Mediante el siguiente código podemos realizar la conexión:

JSch jsch = new JSch();
try {
   Session session = jsch.getSession("user","host",22);
   session.setConfig("PreferredAuthentications", "password");
   session.setConfig("StrictHostKeyChecking", "no");
   session.setPassword("pass");
   session.connect();
   Channel channel = session.openChannel("sftp");
   ChannelSftp sftp = (ChannelSftp) channel;
  sftp.connect();
} catch (JSchException e) {
   System.out.println("No se pudo realizar la conexión");
}

 Una vez realizada la conexión, ya podemos realizar la transferencia de ficheros.

Transferencia de ficheros

El siguiente código sirve para subir un fichero al servidor:

try {
   File file = new File("pathSistema");
   InputStream inputStream = new FileInputStream(file);
   sftp.put(inputStream,file.getName());
   inputStream.close();
} catch (SftpException e) {
   System.out.println("No se pudo subir el fichero");
} catch (IOException e) {
   System.out.println("No se pudo crear el fichero");
}

Para descargar el fichero, solo necesitamos su nombre:

try {
   InputStream is = sftp.get("nombreFicheroRemoto");
} catch (SftpException e) {
   System.out.println("No se pudo descargar el fichero");
}

Finalmente, para eliminar el fichero también debemos pasarle su nombre:

try {
   sftp.rm("nombreFicheroRemoto");
} catch (SftpException e) {
   System.out.println("No se pudo eliminar el fichero");
}

Esto ha sido todo. Así de simple es trabajar en Java con un servidor SSH gracias a la libraría JSch. Espero que os sea útil este artículo y recordar que cualquier duda o problema podéis dejarlo en los comentarios.

2 Comentarios

  1. Gracias por tu aporte, una inquietud al bajar el archivo me indica que se descarga pero no se donde se encuentra el archivo descargado, trabajo en liux

    • Rubén Cotera Reply to Rubén

      Buenas Marco, me algro que te sirva lo que escribimos por aquí.
      Aunque lo escribió Victor voy a responderte yo. Me parece que se debe descargar en el directorio desde el que se ejecuta el programa. Para elegir donde se descargue he encontrado ésta otra función:
      InputStream is = sftp.get(“remote-file”, “local-file” );

      Así tú eliges donde se descarga y no quedan dudas al respecto.

      Espero ayudarte, un saludo.

Dejar un comentario

Uso de cookies

Este sitio web utiliza cookies para que usted tenga una mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información sobre las cookies utilizadas.plugin cookies

ACEPTAR
Aviso de cookies