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)
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)