Java - Conexion SSH a traves de Java

   
Vista:

Conexion SSH a traves de Java

Publicado por Alberto (2 intervenciones) el 23/05/2016 18:13:45
Buenas,

Les comento mi caso,

En mi empresa tenemos un contrato con 1&1, si no lo conocen es un proveedor de hosting, el cual nos ofrece también unas bases de datos online, las cuales solo se puede acceder mediante phpmyadmin o a través de un túnel SSH.

Estoy desarrollando un programa en Java para poder organizar un poco la empresa, y necesito conectar con esa base de datos online.

Comentado todo esto, vamos al grano:

He leído varias páginas y foros, de como hacer una conexión ssh a través de Java pero no he conseguido avanzar casi nada.

He usado las librerias de JSHC, pero solo consigo enviar un comando solamente, antes de que se cierre la sesión. Con lo cual no puedo hacer algo tan simple como un comando "cd" para cambiar de directorio, seguido en un "ls" para ver el contenido de la carpeta.

En principio solo quiero implementar una ventana de comandos, pero mas adelante quiero hacer más cosas con los datos que me devuelve el servidor.

ventana1

Como se puede ver en la imagen, solamente consta de un textField para escribir el comando, un botón para enviar el comando y un textArea para pintar lo que me de devuelve el servidor.

El código que tengo ahora mismo en la clase que se encarga de la conexión al servidor es el siguiente:

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
package sshtools;
 
import com.jcraft.jsch.*;
import java.io.InputStream;
 
public class ConectionSSH {
 
	public void exeComando(String user, String host, String pasw, String comando, javax.swing.JTextArea resultado) {
		try {
			JSch jsch = new JSch();
			Session session = jsch.getSession(user, host, 22);
			session.setPassword(pasw);
			session.setConfig("StrictHostKeyChecking", "no");
			session.connect(30000);
			Channel channel = session.openChannel("exec");
			((ChannelExec) channel).setCommand(comando);
			channel.setInputStream(null);
 
			((ChannelExec) channel).setErrStream(System.err);
 
			InputStream in = channel.getInputStream();
 
			channel.connect();
			resultado.append("-------------" + "\n");
			byte[] tmp = new byte[1024];
			while (true) {
				while (in.available() > 0) {
					int i = in.read(tmp, 0, 1024);
					if (i < 0) {
						break;
					}
					resultado.append(new String(tmp, 0, i) + "\n");
				}
				if (channel.isClosed()) {
					System.out.println("exit-status: " + channel.getExitStatus());
					break;
				}
				try {
					Thread.sleep(1000);
				} catch (Exception ee) {
				}
			}
			channel.disconnect();
			session.disconnect();
		} catch (Exception e) {
			System.out.println(e);
		}
	}
}

Espero que alguien me pueda ayudar a encaminar la solución para el problema que tengo.

Si tienen alguna duda con el codigo que he puesto, pregunten por favor, he tratado de explicarme lo mejor que he podido

Gracias de antemano.

Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder