El command Shell funciona localmente pero no se analiza correctamente a través de ssh

Si ejecuto el siguiente command de shell localmente, obtengo el resultado esperado:

adb -s 123456789 shell "su -c 'mount -o remount,rw /system;rm -r /system/app/MyApp.apk;cp /sdcard/MyApp.apk /system/app/MyApp.apk;chmod 644 /system/app/MyApp.apk;'" 

Básicamente, adb es el puente de debugging de Android y lo uso para abrir un shell en el dispositivo 123456789. El set externo de "" se usa para encapsular los commands que deben ejecutarse en el shell. El set interno de '' se usa para encapsular el set de commands que se deben ejecutar como superusuario en she shell. Todo esto funciona correctamente y obtengo el resultado esperado.

Sin embargo, si bash ejecutar este command a través de ssh:

  ssh -i <path to rsa id file> root@<address> adb -s 123456789 shell "su -c 'mount -o remount,rw /system;rm -r /system/app/MyApp.apk;cp /sdcard/MyApp.apk /system/app/MyApp.apk;chmod 644 /system/app/MyApp.apk;'" 

Los commands no se analizan correctamente y obtengo los siguientes errores:

Uso: su [opciones] [-] [-] [INICIAR SESIÓN] [-] [args …]

Opciones: –daemon inicia el agente su daemon -c, –command COMMAND pasa COMMAND al shell invocado -h, –help muestra este post de ayuda y sale -, -l, –login pretende que el shell sea un inicio de session shell -m, -p, -preserve-environment no cambia las variables de entorno -s, –hell SHELL usa SHELL en lugar de la pnetworkingeterminada / system / bin / sh -u visualiza el modo multiusuario y sale -v, –version mostrar número de versión y salir -V mostrar código de versión y salir, esto es usado casi exclusivamente por Superuser.apk

mount: no se puede encontrar / datos en / etc / fstab rm: no se puede eliminar '/system/app/MyApp.apk': ningún file o directory cp: no se puede 'stat /' /sdcard/MyApp.apk ': no ​​existe tal file o directory chmod: no se puede acceder a '/system/app/MyApp.apk': no ​​existe ningún file o directory

Lo que me lleva a creer que los commands no se analizan correctamente. Intenté encapsular el command ssh'd de esta manera, pero no funcionó (lo intenté con comillas simples o dobles):

  ssh -i <path to rsa id file> root@<address> "adb -s 123456789 shell "su -c 'mount -o remount,rw /system;rm -r /system/app/MyApp.apk;cp /sdcard/MyApp.apk /system/app/MyApp.apk;chmod 644 /system/app/MyApp.apk;'"" 

No soy un gran usuario de Linux e intenté search pero no se me ocurrió nada. ¿Hay alguna forma de ejecutar mi command a través de ssh?

EDITAR: parece que apunté el problema. Si ejecuto este command simple todo funciona perfectamente: ssh root @ adb shell "su -c 'ls -l'"

Si ejecuto dos commands sin parameters, también obtengo el resultado esperado: ssh root @ adb shell "su -c 'ls; ls'"

Sin embargo, si ejecuto los dos commands y si ambos commands tienen un parámetro adicional, aparece un error: ssh root @ adb shell "su -c 'ls -l; ls -l'"

El primer command se ejecuta correctamente (obtengo una list con el parámetro -l), pero en lugar de get la list de files por segunda vez recibo el post "/ system / bin / sh: ls -l: not found". Que esta pasando? Esto debería ser más sencillo de solucionar que mi primera publicación, que tenía commands largos y específicos con múltiples comillas anidadas.

Creo que el problema es que bash en su máquina local está interpretando las citas y no enviándolas. Intenta escaping de las comillas con \ , es decir, \" . Es posible que tengas que experimentar. La ejecución remota de commands que requieren cotizaciones es siempre complicado.

Esto puede no ser posible en su entorno, pero si puede crear ese command largo en un script de shell en la máquina remota y luego llamar a esa secuencia de commands, puede ahorrarle algunos dolores de cabeza.