Sin embargo, los comandos ad hoc no son reutilizables. Claro, le proporcionan una forma de ejecutar rápidamente tareas individuales, pero no se pueden reutilizar. Se podría dibujar una analogía donde el modo de libro de jugadas es como un script de shell, mientras que los comandos individuales son frases individuales.
Hablando de shell, Ansible también tiene un módulo de shell. Este módulo se utiliza para ejecutar comandos de shell en los sistemas de destino. En esta guía, repasaremos el módulo de shell Ansible y demostraremos ejemplos de cómo se puede usar.
¿Cuál es el módulo de shell??
El módulo de shell Ansible permite al usuario ejecutar comandos complejos con redirección, tuberías, etc. Toma un nombre de comando, sus discusiones con delimitadores de espacios en blanco y lo ejecuta en hosts remotos.
Puede sonar exactamente lo mismo que el módulo de comando Ansible, pero la diferencia es que ejecuta los comandos en el host usando un shell. El módulo de shell también tiene acceso a variables de entorno y operadores especiales como | &; etc. Aún mejor, puede ejecutar scripts completos usando el módulo de shell. No obstante, es de conocimiento común entre los usuarios de Ansible que el módulo de comando sea una opción más segura y predecible que el módulo de shell.
Finalmente, es importante tener en cuenta que este módulo solo funciona con Linux Systems. Los usuarios de Windows pueden usar Ansible.Windows.win_shell en su lugar. Dicho esto, entremos en los detalles del módulo de shell Ansible.
Usando el módulo de shell Ansible
Antes de comenzar a ejecutar comandos y scripts, echemos un vistazo a los parámetros a los que deberá pasar valores mientras usa este módulo.
Con eso fuera del camino, vamos a algunos ejemplos de cómo usar la carcasa Ansible.
Ejemplo 1: Cambiar el directorio de trabajo
Si desea cambiar el directorio de trabajo antes de ejecutar un comando, así es como se haría.
- Nombre: Cambiar el directorio de trabajo a MyDirAhora que hemos creado un libro de jugadas, puede ejecutarlo usando el terminal de Linux ejecutando:
Ansible-Playbook Testbook.YMLEjemplo 2: Extracción de la salida de comandos
Si desea capturar y almacenar el valor de retorno de un comando shell, se puede usar la palabra clave de registro.
- Nombre: Creación de un .Archivo TXT en $ HomeEjemplo 3: Verificar la fecha
Comencemos por verificar la fecha en nuestro servidor remoto llamado prueba. Tenga en cuenta cómo la sintaxis del módulo de shell es diferente aquí. Esta es solo otra forma de usar el módulo de shell Ansible.
- Nombre: Verificar la fechaHemos utilizado el comando de fecha simple para verificar la fecha en un sistema remoto. Además, la salida del comando (la fecha en sí) se devuelve a un registro llamado DataCmd. Finalmente, mostramos el contenido de la variable de registro DataCmd imprimiendo su atributo STDOUT.
Ejemplo 4: Ejecutando múltiples comandos
En este ejemplo, crearemos algunos archivos de texto en un directorio temporal.
tareas:Aquí, hemos usado el código de shell para crear tres archivos, a saber, myFile1, myFile2, y myfile3. La línea verdadera convertida: verdadera le permite "convertirse" en el usuario del host remoto. Finalmente, pasamos un argumento de Chdir y cambiamos el directorio.
Ejemplo 5: Aplicación de redirección y tubería
Ahora, veamos cómo funcionan las tuberías y la redirección en el módulo de shell Ansible. Ejecutaremos un comando LS simple con algunos preprocesamiento a través de AWK. Además, usamos SED para eliminar líneas vacías. Al final, redirigiremos la salida a un archivo de texto.
- Nombre: tome una lista del directorio y alimente a un archivoPrimero, ejecutamos el comando mencionado anteriormente y almacenamos su resultado en MyDir.TXT. Posteriormente, usamos otro comando CAT para guardar el contenido del archivo en un registro. Finalmente, se muestra esta variable de registro.
Cómo prevenir la inyección de comando?
Como mencionamos anteriormente, el módulo de comando se considera una forma más segura de hacer las cosas. Sin embargo, tiene una funcionalidad algo limitada. Entonces, ¿cómo se usa el módulo de shell de manera segura??
Puede usar el filtro de cotización para proteger los nombres variables que pasa al módulo de shell desde la inyección de comando. A continuación se muestra un ejemplo de esta desinfección.
- Nombre: Creación de un .txt con el filtro de cotizaciónEs una buena práctica usar siempre el filtro de cotización con sus variables. Esto evitará que los hackers cambien el comando en el tiempo de ejecución. Es muy parecido a la inyección de SQL, pero mientras tome precauciones de seguridad, no tiene que preocuparse!
Conclusión
El módulo de shell Ansible es un módulo versátil y potente que aumenta el control del usuario y hace que la configuración remota sea mucho más fácil. En este artículo, hemos analizado lo que hace, qué parámetros tiene y qué argumentos requiere, y más. Con suerte, ahora está bien equipado para usar el módulo de shell Ansible.