Ejecute solo el primer comando Bash de varios comandos en línea

Tengo un programa que ejecuta ciertos comandos a través de SSH. Algunos de los comandos son estáticos (siempre los mismos) y otros tienen argumentos que cambian entre ejecuciones. El programa utiliza una clave privada para conectarse al servidor y la clave autorizada se bloquea para forzar el comando "sh run_script.sh".

run_script.sh solo ejecutará $SSH_ORIGINAL_COMMAND si coincide con un conjunto de comandos estáticos, o si comienza de cierta manera (para comandos no estáticos).

El problema es que algo como

allowedCommand arg1 arg2 && rm -r ~/ 

probablemente se deslizaría.

¿Es posible hacer que bash solo ejecute el primer comando e ignore cualquier cosa después de una canalización o &&?

preguntado el 12 de junio de 12 a las 18:06

1 Respuestas

Es posible que pueda establecer una secuencia de comandos contenedora como shell de inicio de sesión (en lugar de /bin/bash) y hacer que use sed o algo para quitar las partes no deseadas. Estaría sujeto a posibles falsos positivos y puede fallar para argumentos que contienen espacios en blanco y en otras situaciones (ver BashFAQ / 050).

Es posible que este enfoque presente problemas de seguridad imprevistos.

Sería mejor utilizar las características de seguridad proporcionadas por ssh, sudo, un caparazón restringido como rbash y otras instalaciones de seguridad proporcionadas por el sistema operativo en combinación.

Respondido el 12 de junio de 12 a las 19:06

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.