Ejecute solo el primer comando Bash de varios comandos en línea
Frecuentes
Visto 247 veces
0
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 &&?
1 Respuestas
1
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 bash ssh sh or haz tu propia pregunta.