Mostrando entradas con la etiqueta FTP. Mostrar todas las entradas
Mostrando entradas con la etiqueta FTP. Mostrar todas las entradas

viernes, 30 de mayo de 2014

Conexión SSH y SFTP en JAVA

1 comentarios
Es muy común que nuestras aplicaciones necesiten hacer descargas o subidas de ficheros a otras máquinas, para ello, 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). y luego tenemos que agregar la librería .jar externa en nuestro IDE, ya sea Eclipse o NetBeans. JSch es utilizado en varias famosas aplicaciones como Eclipse y NetBeans, Jakarta, Ant, y otros.

Archivo CargaSFTP.java

1.        package test;  
2.          
3.        import java.io.FileWriter;  
4.        import java.io.PrintWriter;  
5.          
6.        import com.jcraft.jsch.ChannelSftp;  
7.        import com.jcraft.jsch.JSch;  
8.        import com.jcraft.jsch.Session;  
9.        import com.jcraft.jsch.UserInfo;  
10.         
11.       public class CargaSFTP {  
12.        private static final String user = "test";  
13.        private static final String host = "Ip-servidor";  
14.        private static final Integer port = 22;  
15.        private static final String pass = "**-Contraseña-**";  
16.         
17.        public static void main(String[] args) throws Exception {  
18.         System.out.println("------------------- INICIO ----------------- ");  
19.         JSch jsch = new JSch();  
20.         Session session = jsch.getSession(user, host, port);  
21.         UserInfo ui = new SUserInfo(pass, null);  
22.         
23.         /* Informacion de las rutas del archivo */  
24.         String nombreLocalArchivo = "localServidor.txt";  
25.         String carpetaLocal = "c:/test/";  
26.         String nombreRemotoArchivo = "NombreArchivoRemoto.html";  
27.         String carpetaRemota = "/listas/";  
28.         
29.         session.setUserInfo(ui);  
30.         session.setPassword(pass);  
31.         session.connect();  
32.         ChannelSftp sftp = (ChannelSftp) session.openChannel("sftp");  
33.         sftp.connect();  
34.         generarFichero(carpetaLocal, nombreLocalArchivo);  
35.         // Nos ubicamos en la carpeta Remota  
36.         sftp.cd("/docs/web/" + carpetaRemota);  
37.         System.out.println("Subiendo ...");  
38.         // Colocamos el archivo local en el servidor a la carpeta remota.  
39.         sftp.put(carpetaLocal + nombreLocalArchivo, nombreRemotoArchivo);  
40.         
41.         System.out.println("Archivo subido...");  
42.         
43.         System.out.println("El archivo se puede verificar en la url:");  
44.         System.out.println("Ip_servidor/~test"  
45.           + carpetaRemota + nombreRemotoArchivo);  
46.         
47.         sftp.exit();  
48.         sftp.disconnect();  
49.         session.disconnect();  
50.         
51.         System.out.println("----------------- FIN ----------------- ");  
52.        }  
53.         
54.        private static void generarFichero(String carpetaLocal,  
55.          String nombreLocalArchivo) {  
56.         FileWriter fichero = null;  
57.         PrintWriter pw = null;  
58.         try {  
59.          fichero = new FileWriter(carpetaLocal + nombreLocalArchivo);  
60.          pw = new PrintWriter(fichero);  
61.          pw.println("Fichero con extensión TXT, para ser cargado por SFTP");  
62.         
63.         } catch (Exception e) {  
64.          e.printStackTrace();  
65.         } finally {  
66.          try {  
67.           if (null != fichero)  
68.            fichero.close();  
69.          } catch (Exception e2) {  
70.           e2.printStackTrace();  
71.          }  
72.         }  
73.        }  
74.       }  

Archivo SUserInfo.java 
1.            
2.        package test;  
3.          
4.        import com.jcraft.jsch.UserInfo;  
5.          
6.        public class SUserInfo implements UserInfo {  
7.           
8.            private String password;  
9.            private String passPhrase;  
10.          
11.           public SUserInfo (String password, String passPhrase) {  
12.               this.password = password;  
13.               this.passPhrase = passPhrase;  
14.           }  
15.          
16.           public String getPassphrase() {  
17.               return passPhrase;  
18.           }  
19.          
20.           public String getPassword() {  
21.               return password;  
22.           }  
23.          
24.           public boolean promptPassphrase(String arg0) {  
25.               return true;  
26.           }  
27.          
28.           public boolean promptPassword(String arg0) {  
29.               return false;  
30.           }  
31.          
32.           public boolean promptYesNo(String arg0) {  
33.               return true;  
34.           }  
35.          
36.           public void showMessage(String arg0) {  
37.               System.out.println("SUserInfo.showMessage()");  
38.           }  
39.       }  

Con esto ya hemos realizado la conexión SFTP con el servidor FTP.