tutorial libreria jcraft how from docs android ssh jsch

android - libreria - maven jcraft jsch



La ejecuciĆ³n del comando usando el canal "exec" con JSch no devuelve ninguna salida (1)

Se desconecta inmediatamente después de iniciar el comando, antes de devolver cualquier salida.

Tienes que esperar a que se cierre el canal "exec" (se cierra una vez que termina el comando).

Vea el ejemplo oficial de JSch para el canal "ejecutivo" .

byte[] tmp=new byte[1024]; while(true){ while(in.available()>0){ int i=in.read(tmp, 0, 1024); if(i<0)break; System.out.print(new String(tmp, 0, i)); } if(channel.isClosed()){ if(in.available()>0) continue; System.out.println("exit-status: "+channel.getExitStatus()); break; } try{Thread.sleep(1000);}catch(Exception ee){} }

Estoy intentando ejecutar un comando en un servidor Linux usando SSH desde Android con JSch.

Por lo que sé, me estoy conectando al servidor, pero cuando intento recuperar los resultados del comando, no obtengo nada.

Conectar al servidor:

public class SSHCommand { public static String executeRemoteCommand( String username, String password, String hostname, int port) throws Exception { JSch jsch = new JSch(); Session session = jsch.getSession(username, hostname, port); session.setPassword(password); // Avoid asking for key confirmation Properties prop = new Properties(); prop.put("StrictHostKeyChecking", "no"); session.setConfig(prop); session.connect(); // SSH Channel ChannelExec channelssh = (ChannelExec) session.openChannel("exec"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); channelssh.setOutputStream(baos); // Execute command channelssh.setCommand("ls"); channelssh.connect(); channelssh.disconnect(); return baos.toString(); } }

Recuperar datos:

public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); final String TAG = "TESTING"; new AsyncTask<Integer, Void, Void>(){ @Override protected Void doInBackground(Integer... params) { try { Log.d(TAG, SSHCommand.executeRemoteCommand("username", "password", "192.168.0.1", 22)); } catch (Exception e) { e.printStackTrace(); } return null; } }.execute(1); } }

¿Que me estoy perdiendo aqui?