¿Existe un paquete API HTTP para administrar servidores SSH, FTP y Apache?

Estoy buscando un paquete de código abierto para configurar una API HTTP para crear, modificar y desmantelar otros tipos de servidores en un servidor Linux. Me gustaría poder administrar:

  • Un servidor SSH (incluido SFTP)
  • Un servidor FTP (incluyendo FTPS)
  • Un servidor apache

Por ejemplo, me gustaría poder decir:

  • Cree una instancia de Apache escuchando en 1.2.3.4:8080 con docroot/var/www/mydocroot
  • Cree un servidor SSH escuchando en 1.2.3.5:8081
  • Enumere todos los servidores FTP actualmente conocidos
  • Derribar el servidor FTP que escucha en 1.2.3.6:8082

He sugerido una API basada en HTTP ya que esta parece ser la forma más sensata de comunicarse con este sistema de forma remota. Me imagino que también sería RESTful. Sin embargo, este no es un requisito estricto: si hay otra forma de comunicarse basada en estándares, entonces aún podría ser adecuada.

En caso de que sea útil guiar las respuestas, mi caso de uso es un conjunto de pruebas de integración que prueban una aplicación que realiza implementaciones de software. Las pruebas individuales deberán crear servidores web y varios sistemas de transporte de archivos para verificar el funcionamiento de la aplicación. Actualmente solo pruebo en un entorno Docker y enciendo y apago los servidores SSH/FTP con comandos de shell (esto significa que el conjunto actual de pruebas no se puede paralelizar, ya que todos usan una sola instancia de cada servicio).

Preveo que esta herramienta administrará servidores en el mismo servidor en el que está instalada y que debería ejecutarse como raíz. Sin embargo, podría administrar otro servidor en su lugar.

Si hay una API HTTP para algo como cPanel o WebMin, eso podría funcionar. Encontré este servicio , pero no es de código abierto, y es solo para un servicio FTP alojado en lugar de un paquete que uno puede autoinstalar.

Estaba pensando en escribir este servicio yo mismo y abrirlo, pero tiene sentido ver si existe primero. Mis búsquedas en la web indican "no" en este momento, pero vale la pena asegurarse.

Respuestas (1)

Parece que lo que realmente quiere aquí es una forma de simplificar el manejo de la gestión de la configuración y el aprovisionamiento del sistema. Mi recomendación personal sería usar Ansible para esto.

Ansible es una herramienta de automatización de implementación y administración de configuración escalable escrita en Python. Utiliza un sistema central para la administración en el que debe instalarse, pero no requiere casi nada en ninguno de los sistemas que se administran. Los libros de jugadas de Ansible (su equivalente a los scripts) usan una sintaxis realmente simple y fácil de aprender basada en YAML y Jinja2 para especificar qué módulos (esencialmente comandos) ejecutar en qué sistemas.

Se proporciona una gran variedad de módulos diferentes con Ansible (consulte aquí la lista completa), incluidos los que se utilizan para el manejo de contenedores Docker, la gestión de paquetes instalados en un host, el manejo de qué servicios están habilitados o no, la implementación de software, la modificación de la configuración y muchos más. otras cosas.

Algo notable es el hecho de que Ansible admite lo que ellos llaman 'inventario dinámico', lo que significa que puede girar trivialmente máquinas virtuales o contenedores efímeros y usarlos sin tener que preocuparse por nombrarse a sí mismo.

También puede invocar módulos individuales a mano, lo que permite cambios de configuración de forma libre como está describiendo.

Lo único que realmente le falta dadas sus limitaciones es una API HTTP (se ejecuta desde la línea de comandos y no hay un servicio persistente asociado ni en el sistema local ni en los sistemas administrados).

Gracias por la sugerencia. Esa es una forma novedosa de pensar sobre el problema, y ​​pensaré un poco en cómo aplicarlo. Tengo un poco de experiencia en Ansible, aunque hace algunos años que no lo uso; Recuerdo que me gustó. Mi duda es cómo una caja de prueba se enfrentará a flujos paralelos de configuración provenientes de pruebas paralelas: mis pruebas actualmente configuran las cosas según las necesitan, en lugar de configurarlo todo desde el principio.
En parte, esto se debe a la naturaleza dinámica de las pruebas; por ejemplo, tengo un código de detección automática de transporte que selecciona SFTP/FTPS/FTP, por lo que necesito configurar los servidores relevantes y luego encenderlos. /off según corresponda para garantizar que el código de detección obtenga la respuesta correcta.