• Compra una licencia de Windows 10/11 (10€) u Office (18€) al mejor precio u Office al mejor precio. Entra en este post con las ofertas
  • ¡Bienvenid@! Recuerda que para comentar en el foro de El Chapuzas Informático necesitas registrar tu cuenta, tardarás menos de 2 minutos y te dará valiosa información además de ayudarte en lo que necesites o pasar un rato agradable con nosotros.

Android Studio (SSH/JSCH) Pi

fransk8

Chapucillas
Registrado
2 Jul 2015
Mensajes
115
Puntos
18
Hola Buenas estoy intentando para un trabajo final de clase lograr una conexion por SSH a mi raspberry Pi pero no consigo solucionar el problema.

Tengo mi pi configurada para acceso por SSH ya que suelo usar la App JuiceSSH

Codigo principal:

public class MainActivity extends ActionBarActivity {

private static JSch jsch;

static EditText usuario;
static EditText hostname;
static EditText pass;
public Toast t;



@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

usuario = (EditText) findViewById(R.id.usuario);

pass = (EditText) findViewById(R.id.password);

hostname = (EditText) findViewById(R.id.ip);


final String username = usuario.getText().toString();

final String password = pass.getText().toString();

final String ip = hostname.getText().toString();


Button boton = (Button) findViewById(R.id.conectar);

boton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*EJECUTAR EN SEGUNDO PLANO*/
new AsyncTask<String, Void, Void>() {

@Override
protected Void doInBackground(String... params) {
try {

String username = params[0];
String password = params[1];
String ip = params[2];

executeRemoteCommand(username, password, ip, 22);

} catch (Exception e) {
e.printStackTrace();

}


return null;
}
}.execute(username, password, ip);

}
});

}

/*METODO EJECUTAR COMANDO*/
public static String executeRemoteCommand(String username, String password, String ip,
int port)
throws Exception {

username = usuario.getText().toString();

password = pass.getText().toString();

ip = hostname.getText().toString();

port = 22;

jsch = new JSch();

Session sesion = jsch.getSession(username, ip, port);

sesion.setPassword(password);

/*PREGUNTAR POR INTERCAMBIO ESTRICTO DE LLAVES*/

Properties prop = new Properties();

prop.put("StrictHostKeyChecking", "no");

sesion.setConfig(prop);

/*CONECTAMOS LA SESION*/

sesion.connect();

/*CONFIGURACION DEL CANAL SSH*/

ChannelExec canalssh = new ChannelExec();

sesion.openChannel("exec");

ByteArrayOutputStream baos = new ByteArrayOutputStream();

canalssh.setOutputStream(baos);

/*EJECUTAMOS EL COMANDO*/

canalssh.setCommand("/opt/vc/bin/vcgencmd measure_temp");

canalssh.connect(1000);

canalssh.disconnect();

canalssh.getOutputStream();

return baos.toString();
}

}

LOS PERMISOS DEL MANIFEST:

<uses-permission android:name="android.permission.INTERNET" />
<permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


EL ERROR:


05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: com.jcraft.jsch.JSchException: session is not available
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.jcraft.jsch.Channel.getSession(Channel.java:674)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.jcraft.jsch.Channel.sendChannelOpen(Channel.java:726)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.jcraft.jsch.Channel.connect(Channel.java:151)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.example.escuanchi.remotemon2.MainActivity$override.executeRemoteCommand(MainActivity.java:130)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.example.escuanchi.remotemon2.MainActivity$override.access$dispatch(MainActivity.java)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.example.escuanchi.remotemon2.MainActivity.executeRemoteCommand(MainActivity.java:0)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.example.escuanchi.remotemon2.MainActivity$1$1.doInBackground(MainActivity.java:68)
05-22 15:04:04.064 31138-31494/com.example.escuanchi.remotemon2 W/System.err: at com.example.escuanchi.remotemon2.MainActivity$1$1.doInBackground(MainActivity.java:58)
 
Si eso estoy viendo en la página que me has pasado, entonces no debo añadir la contraseña en el metodo,entonces que seria pi es el usuario de la raspberry y la raspberry pues es RaspberryPi de host no?

username="pi"
hostname="RaspberryPi"
ip="x.x.x.x"

Seria algo asi no?

PD: Los recojo con 3 TextFields de la actividad principal tendria que añadir el del hostname no?
Gracias!
 
Yo lo decia en el metodo getsession...

No he desarrollado nunca Android, o usado ssh por java, pero el analisis de errores apunta ahí...

MotoEizando el foro
 
Nada me estaba liando con el hostname y IP cuando quiere decir hostname se refiere a la IP independientemente del metodo executeRemoteCommand, el caso esque los datos me los envia correctamente y los recibe Pi donde me salta el error es en canalssh.connect(); cuando introduzco mal la ip o usuario y password me salta asique ese apartado no era el error.

Gracias igualmente a ver si lo saco jaja
 
Arriba