Problemas con los comandos específicos de UNIX mientras usa JSCH (EXEC) en Android -- android campo con linux campo con shell campo con exec campo con jsch camp Relacionados El problema

Problems with specific unix commands while using Jsch (Exec) on Android


0
vote

problema

Español

Hola. Estaba haciendo un par de días y una investigación y un análisis de problemas, pero no tengo ni idea de cómo resolver mi problema en este momento.

Tal vez alguien pueda ayudar ...

Estoy usando los dispositivos Android para acceder a My Raspberry Pi para establecer algunos comandos específicos.

Comencé con JSch Shell Command y todo funcionó bien, además del hecho de que nunca pude cerrar una conexión debido a un bucle infinito.

Intenté cambiar a la ejecución, especialmente porque solo quiero enviar un par de comandos y realmente no necesito que Nood lo que sucede en la concha.

De todos modos ... aquí está mi código: La intención es enviar una señal de sueño CEC a mi TV ...

   public c_jsch(String userName, String password,                   String connectionIP, String knownHostsFileName) {     JSch jsch = new JSch();     System.out.println("com.jcraft.jsch BBÄÄÄHHMM");     try     {         Session session = jsch.getSession("pi", "192.168.188.23", 22);         session.setConfig("StrictHostKeyChecking", "no");         session.setPassword("raspberry");         session.connect();          String command = "/home/pi/.xbmc-current/xbmc-bin/bin/cec-client -s -d 1";         String command2 = "tx 10 36    ";          ChannelExec channel = (ChannelExec) session.openChannel("exec");         channel.setCommand(command);          channel.setInputStream(null);          channel.connect();         InputStream in = channel.getInputStream();         //NOT YET USEFUL         OutputStream out = channel.getOutputStream();          System.out.println("com.jcraft.jsch Unix system connected...");          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("com.jcraft.jsch Feedback: " + new String(tmp, 0, i));                 // NOT WORKING                 out.write(command2.getBytes());                 out.flush();                 System.out.println("com.jcraft.jsch Command flushed");             }             if (channel.isClosed())             {                 System.out.println("com.jcraft.jsch exit-status: " + channel.getExitStatus());                 break;             }             try             {                 Thread.sleep(1000);             }             catch (Exception ee)             {             }         }         channel.disconnect();         session.disconnect();         System.out.println("com.jcraft.jsch exit-status: DONE");     }     catch (Exception e)     {         System.out.println("com.jcraft.jsch exit-status: " +  e.getMessage());     } }   

Probando este código no arroja mensajes de error, pero un mensaje de estado de salida decepcionante: 127. Esto significa que no se encuentra el comando ... Así que asumo que hay una gran diferencia entre los comandos de Shell y EXEC ... con Shell i funciona como un encanto en SSH.

Espero que puedas ayudarme.

::: Actualizar, ya que estaba trabajando por primera vez con tuberías | Eso no es suficiente para EXEC y tuvo que agregar la corriente de salida para enviar comandos después de conectar al canal que pude realizar enviando comandos a mi televisor ... gracias

Original en ingles

Hello i was doing a couple of days and research and some problem analysis, but i have no clue how to solve my Problem right now.

Maybe someone can help....

I am using Jsch for Android devices to access my raspberry pi in order to set some specific commands.

I began with Jsch shell command and everything worked fine besides the fact that i was never able to close a connection due to an infinite loop.

I tried to switch to Exec especially because i just want to send a couple of commands and do not really need to nood what happens on the shell.

Anyways... here is my code: The intention is to send a cec sleep signal to my tv...

 public c_jsch(String userName, String password,                   String connectionIP, String knownHostsFileName) {     JSch jsch = new JSch();     System.out.println("com.jcraft.jsch BBxc3x84xc3x84xc3x84HHMM");     try     {         Session session = jsch.getSession("pi", "192.168.188.23", 22);         session.setConfig("StrictHostKeyChecking", "no");         session.setPassword("raspberry");         session.connect();          String command = "/home/pi/.xbmc-current/xbmc-bin/bin/cec-client -s -d 1";         String command2 = "tx 10 36 \r \n";          ChannelExec channel = (ChannelExec) session.openChannel("exec");         channel.setCommand(command);          channel.setInputStream(null);          channel.connect();         InputStream in = channel.getInputStream();         //NOT YET USEFUL         OutputStream out = channel.getOutputStream();          System.out.println("com.jcraft.jsch Unix system connected...");          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("com.jcraft.jsch Feedback: " + new String(tmp, 0, i));                 // NOT WORKING                 out.write(command2.getBytes());                 out.flush();                 System.out.println("com.jcraft.jsch Command flushed");             }             if (channel.isClosed())             {                 System.out.println("com.jcraft.jsch exit-status: " + channel.getExitStatus());                 break;             }             try             {                 Thread.sleep(1000);             }             catch (Exception ee)             {             }         }         channel.disconnect();         session.disconnect();         System.out.println("com.jcraft.jsch exit-status: DONE");     }     catch (Exception e)     {         System.out.println("com.jcraft.jsch exit-status: " +  e.getMessage());     } } 

Trying this code throws no error messages but a disappointing exit status-message: 127. This means command not found.... so i assume there is a big difference between shell and exec commands ... with shell i works like a charm on ssh.

I hope you can help me.

:::Update, as i was first working with Pipes | that are not sufficient for exec and had to add Outputstream in order to send commands after connected to the channel i was able to realise sending commands to my Tv... thank you

              
         
         

Lista de respuestas

0
 
vote

Actualizé mi código de arriba y añadido / R / N a la cadena que iba a descargar. Este fue en realidad el problema abierto. â € "Derkai

 

I updated my code above and added /r /n to the string that i was going to flush. this was actually the open issue. xe2x80x93 DerKai

 
 

Relacionados problema

7  Generar una clave RSA de 4096 bits es una manera más lenta que 2048-bit usando JSCH  ( Generating a 4096 bit rsa key is way slower than 2048 bit using jsch ) 
Necesito crear claves RSA públicas y privadas para una aplicación cliente / servidor, y estoy usando el jsch Biblioteca para hacerlo. He estado generando ll...

4  JSCH logs en archivos  ( Jsch logs in files ) 
Quiero guardar los registros de JSCH en el archivo porque no muestra nada en la consola. Este es mi código: public boolean openConnection() throws ItsSsh...

3  Cómo usar los canales 'EXEC' y 'SFTP' en JSCH al mismo tiempo usando una sesión  ( How to use both exec and sftp channels in jsch at same time using one sessio ) 
a continuación es el fragmento de código JSch jsch = new JSch(); session = jsch.getSession(SFTPUSER,SFTPHOST,SFTPPORT); session.setPassword(SFTPPASS); java...

0  Cómo manejar la contraseña expirada con JSCH LB en Java  ( How to handle password expired using jsch lib in java ) 
master2 arriba es el código. Estoy recuperando archivos de algunos nodos remotos utilizando el código anterior Para el propósito de inicio de sesión, pero...

0  El cliente SFTP Java mantiene el proceso SSHD que se ejecuta en la máquina remota  ( Sftp java client keeps sshd process running on remote machine ) 
Estoy usando la biblioteca de jraft para enviar archivos de un servidor a otro, usando SCP. El código es así public class Scp { String DestinationHost;//h...

1  Cómo escribir un archivo de forma remota usando Java  ( How to write a file remotely using java ) 
Estoy tratando de crear un archivo en un servidor remoto que conecto al servidor y estoy intentando ahora para crear el archivo en el servidor. Este es mi m...

0  NGIT / NSCH Generando SSH KEYPAIR (C # JGIT)  ( Ngit nsch generating ssh keypair c jgit ) 
Estoy deseando generar un nuevo teclado para usar con NGIT (JGIT). ¿Cómo genero un nuevo teclado a través del código? ...

0  La autenticación de JSCH falla mientras se conecta a una caja UNIX  ( Jsch auth fail while connecting to a unix box ) 
Estoy tratando de leer un archivo simple desde una ruta en mi servidor UAT. Pruebas de mi local: sigo obteniendo la excepción de JSchException: AUTH FALLE. El...

4  Mueva un directorio en un servidor remoto a otra ubicación en el mismo servidor remoto usando JSCH  ( Move a directory in remote server to another location in the same remote server ) 
Estoy usando la API de JSCH para conectarse al servidor remoto a través de SFTP. Necesito mover un directorio presente en el servidor remoto de la ubicación A...

7  Error de "SESION está abajo" al abrir un canal SSH con JSCH  ( Session is down error when opening an ssh channel with jsch ) 
He hecho un cliente SSH con JSCH. El cliente está funcionando correctamente con mi servidor Apache MINA SSH. Pero cuando lo pruebo con un equipo real, falla. ...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos