Cómo subir un archivo a un servidor con la librería SFTP JSCH en Java

Cómo subir un archivo a un servidor con la librería SFTP JSCH en Java

La tarea de crear un cliente SFTP en Java se volvio una tarea realmente sencilla gracias a la librería JSCH. JSch es una implementación del protocolo SSH2 en Java (que permite usar el canal SFTP). Esta librería te permite conectarte a un servidor sshd y usar redirección de puertos, redirección X11, transferencia de archivos, etc. además puedes integrar dichas funcionalidades a tus propios programas en Java. Esta librería se encuentra licenciada bajo la licencia BSD.

Para subir un archivo local a un directorio remoto en un servidor al que se accede usando el protocolo SFTP con Java usando esta librería, puedes usar el siguiente snippet: 

// Recuerda importar la librería:
import com.jcraft.jsch.*;

// Luego en tu implementación
try {
    JSch ssh = new JSch();
    Session session = ssh.getSession("nombreDeUsuario", "miIP90000.dominio.com", 22);
    java.util.Properties config = new java.util.Properties();
    config.put("StrictHostKeyChecking", "no");
    session.setConfig(config);
    session.setPassword("contraseña");
    
    session.connect();
    Channel channel = session.openChannel("sftp");
    channel.connect();

    ChannelSftp sftp = (ChannelSftp) channel;

    sftp.cd(directory);

    // Usa el método put, si estás usando android recuerda remover "file://" de la URL    
    sftp.put("/storage/0/miarchivo.txt", "/var/www/remote/miarchivo.txt");

    Boolean success = true;

    if(success){
        // El archivo ha sido subido satisfactoriamente
    }

    channel.disconnect();
    session.disconnect();
} catch (JSchException e) {
    System.out.println(e.getMessage().toString());
    e.printStackTrace();  
} catch (SftpException e) {
    System.out.println(e.getMessage().toString());
    e.printStackTrace();
}

Esta función resume básicamente todo lo que necesitas escribir para subir un archivo usando el método put de la librería. Solo necesitas saber el directorio local del archivo y uno estipulado para el archivo remoto (donde se subirá). Recuerda que esto es solo un ejemplo, asi que no incluye implementación de seguridad en la sesión. Necesitarás añadir el archivo known_hosts si tu server usa alguno, o añadir una identidad si tu servidor usa una llave publica para autenticación.

Este código funciona en cualquier plataforma que trabaje con Java y la librería JSCH (Android, escritorio etc.).

Esto podria interesarte

Conviertete en un programador más sociable