Crear un cliente SFTP con Java se ha vuelto extremadamente sencillo usando la librería JSCH. JSCH es una librería escrita en Java que implementa SSH2 (permite el uso del canal SFTP). JSCH te permite conectarte a un servidor SSH y usar el reenvío de puertos, reenvío X11, transferencia de archivos, etc., y puede integrar su funcionalidad en sus propios programas escritos en Java. JSch está licenciado bajo la licencia de estilo BSD.
Puedes usar el siguiente código para obtener una lista del contenido de un directorio remoto:
// Recuerda importar las clases requeridas
import com.jcraft.jsch.*;
import com.jcraft.jsch.ChannelSftp.LsEntry;
// Y luego en tu función
try {
JSch ssh = new JSch();
Session session = ssh.getSession("username", "myip90000.ordomain.com", 22);
// Recuerda que este código es solo por propositos de enseñanza, puedes añadir una identidad y un archivo known_hosts
// para prevenir un ataque de MITM
java.util.Properties config = new java.util.Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);
session.setPassword("Passw0rd");
session.connect();
Channel channel = session.openChannel("sftp");
channel.connect();
ChannelSftp sftp = (ChannelSftp) channel;
// Ahora que se tiene un canal abierto, accede a un directorio primero si quieres
// sftp.cd("/var/www/mydirectory");
@SuppressWarnings("unchecked")
// Obten la lista del contenido del actual directorio usando la instrucción ls
java.util.Vector<LsEntry> flLst = sftp.ls("/var/www/mydirectory");
final int i = flLst.size();
// Mostrar la información de cada uno de los archivos/directorios en la consola
for(int j = 0; j<i ;j++){
LsEntry entry = flLst.get(j);
SftpATTRS attr = entry.getAttrs();
System.out.println(entry.getFilename());
System.out.println(directory + "/" + entry.getFilename()); // Directorio remoto
System.out.println("isDir", attr.isDir()); // Es directorio
System.out.println("isLink", attr.isLink()); // Es un symlink (enlace simbólico)
System.out.println("size",attr.getSize()); // obten el tamaño del archivo en bytes
System.out.println("permissions",attr.getPermissions()); // permisos
System.out.println("permissions_string",attr.getPermissionsString());
System.out.println("longname",entry.toString());
}
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();
}
La función ls
hará el trabajo por ti, este retornara un objeto del tipo LsEntry con la información necesaria de un directorio y luego te permitirá acceder a la descripción de cada uno de las items del objeto. Recuerda que como ejemplo, este no incluye ningun tipo de seguridad. Debes agregar los archivos de hosts conocidos (known_hosts) si tu servidor usa uno, o agregar una identidad si tu servidor usa una clave privada para la autenticación. Este código funciona en cualquiera plataforma que use Java y la librería JSCH (Android, Escritorio etc).
Conviertete en un programador más sociable