El proyecto OpDemand Shell contiene la interfaz de cliente de línea de comandos para el sistema C2. Estos módulos de Python son parte de la tecnología de Mando y Control de OpDemand (C2).
Open Source
El proyecto c2-shell se ha hecho de código abierto por OpDemand.
Documentación C2 Shell
Antes de que empieces
- Usted necesitará una cuenta activa C2. Crear una gratis en https://c2.opdemand.com/
- Las instrucciones suponen OSX o Linux (Windows no ha sido probado, pero debería funcionar)
Instalación
La instalación utiliza convención distutils estándar.
sudo python setup.py install
Configuración
Añada su entrada C2 dirección de correo electrónico a la configuración del cliente local.
ajuste local c2 --email=c2user@opdemand.com
A Mas Local c2 mostrará la configuración actual.
Inicio de sesión
Emitir una entrada c2, que utilizará la dirección de correo electrónico configurada por encima y le pedirá una contraseña.
caja @ usuario: ~ / espacio de trabajo / c2-shell $ c2 entrada
contraseña:
2011-06-07 08: 44: 12,052 - INFO - => POSTE https://c2core.opdemand.com/session
2011-06-07 08: 44: 13,095 - INFO - GET https://c2core.opdemand.com/template
2011-06-07 09: 21: 21,879 - INFO - <= 200 OK, leer 1822 bytes application / json
[# Lista JSON de plantillas
& Nbsp; {
& Nbsp; # Primera plantilla
& Nbsp;},
& Nbsp; {
& Nbsp; # Segunda plantilla
& Nbsp;}
]
2011-06-07 09: 21: 21,881 - INFO - (plantilla / lista) el éxito en 0.524872s
Encuentre el valor _id de la plantilla que desea implementar, y copiarlo en el portapapeles.
Crear una nueva plataforma
Seleccione la plantilla deseada y emitir una carga plantilla c2 del _id plantilla, lo que creará una plataforma fresca.
caja @ usuario: ~ / espacio de trabajo / c2-shell plantilla $ c2 carga --_ id = 6c86dfc5ddfe464199021b8dcaf521a2
2011-06-07 09: 42: 36,711 - INFO - => POSTE https://c2core.opdemand.com/template/6c86dfc5ddfe464199021b8dcaf521a2/load
2011-06-07 09: 42: 38,606 - INFO - <= 201 Creado, la lectura de 14.850 bytes de application / json
{
& Nbsp; # Mucho más representación JSON de la plantilla
}
2011-06-07 09: 42: 38,757 - INFO - (plantilla / carga) el éxito en 2.061932s
Lista Plataformas
Emitir una lista de plataformas c2 para ver las plataformas disponibles en su cuenta.
caja @ usuario: ~ / espacio de trabajo / c2-shell lista plataforma $ c2
2011-06-07 09: 46: 48,327 - INFO - => GET https://c2core.opdemand.com/platform
2011-06-07 09: 46: 48,884 - INFO - <= 200 OK, la lectura de 566 bytes de application / json
[
& Nbsp; {
& Nbsp; # Su nueva plataforma
& Nbsp;}
]
2011-06-07 09: 46: 48,885 - INFO - (plataforma / lista) el éxito en 0.572228s
Copie el _id de esta plataforma en el portapapeles.
Lea la plataforma
Las operaciones de lista sólo muestran representaciones resumidas de los elementos de una colección. Para ver la representación completa de una plataforma (que incluye sus componentes anidados) debe emitir una plataforma c2 leer y proporcionar el _id:
caja @ usuario: ~ / / c2-shell de la plataforma $ c2 espacio de trabajo leer --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 16: 06,050 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 16: 06,984 - INFO - <= 200 OK, la lectura de 14.850 bytes de application / json
{
& Nbsp; # representación completa plataforma
}
2011-06-07 10: 16: 07,152 - INFO - (plataforma / leer) el éxito en 1.117754s
Trabajar con respuestas JSON
La plataforma de arriba es demasiado tiempo para leer. Afortunadamente la cáscara C2 incluye una prettifier integrada JSON que hace que la salida JSON desde cualquier comando de shell C2 mucho más fácil de leer.
Simplemente canalizar cualquier comando c2 a C2 bastante:
caja @ usuario: ~ / espacio de trabajo / c2-shell $ template c2 leer --_ id = 6c86dfc5ddfe464199021b8dcaf521a2 | c2 bastante
2011-06-07 09: 32: 00,646 - INFO - => GET https://c2core.opdemand.com/template/6c86dfc5ddfe464199021b8dcaf521a2
2011-06-07 09: 32: 01,378 - INFO - <= 200 OK, la lectura de 12.022 bytes de application / json
2011-06-07 09: 32: 01,535 - INFO - (plantilla / leer) el éxito en 0.904613s
tiers.0.name "Nivel de red"
tiers.0.doctype "nivel"
tiers.0._rev "1-5a37d211b276deee536cd72a016af8fa"
... Resto del prettified JSON
Todos los comandos C2 leen de la entrada estándar y escribe en la salida estándar. Esto significa JSON prima y JSON prettified se pueden canalizar a cualquier otro comando que utiliza tubos de estilo UNIX. (Por ejemplo, grep).
Configurar la plataforma
Lea primero la plataforma y grep para obtener la información de configuración por defecto:
caja @ usuario: ~ / espacio de trabajo / c2-shell de la plataforma $ c2 leer --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 bastante | grep config
2011-06-07 10: 26: 29,828 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 26: 30,486 - INFO - <= 200 OK, la lectura de 14.850 bytes de application / json
2011-06-07 10: 26: 30,635 - INFO - (plataforma / leer) el éxito en 0.821403s
config.access_network "0.0.0.0/0"
config.image_id "ami-06ad526f"
config.doctype "config"
config._rev "1-38d720a0975e4d377ccbfd3cb7864185"
config.access_port "22"
config.cloud_name "nosotros-este-1"
config.clone_.parent_id "ceee3724a3674bc096a2a6d2dfde7209"
config.clone_.parent_impl.cls_ "c2core.resolve.Config"
config.admin_network "0.0.0.0/0"
config._id "ceee3724a3674bc096a2a6d2dfde7209"
config.impl.cls_ "c2core.resolve.Config"
config.views.7bbeacb1082e4810bb1a6643d024496e.0.0 "7bbeacb1082e4810bb1a6643d024496e"
config.views.7bbeacb1082e4810bb1a6643d024496e.0.1 "config"
metadata.config_info.access_port "Puerto de escucha en el servidor"
metadata.config_info.access_network "Máscara de red para los usuarios públicos"
metadata.config_info.cloud_name "Nombre de la región AWS"
metadata.config_info.admin_network "máscara de red para los usuarios administradores"
Vamos a restringir el acceso a la red a un host - 1.1.1.1/32. Para ello será necesario cambiar las teclas access_network y admin_network.
Desde config es un documento anidada con su propio _id y _rev, hay que modificar el documento de configuración directamente. Para ello, seguimos la convención REST de la lectura de la representación y la tubería a una operación de actualización:
caja @ usuario: ~ / espacio de trabajo / c2-shell $ c2 config leer --_ id = ceee3724a3674bc096a2a6d2dfde7209 | actualizar config c2 - --access_network = 1.1.1.1 / 32 --admin_network = 1.1.1.1 / 32
2011-06-07 10: 35: 39,643 - INFO - lectura objeto de la entrada estándar, ctrl-c para romper ...
2011-06-07 10: 35: 39,661 - INFO - => GET https://c2core.opdemand.com/config/ceee3724a3674bc096a2a6d2dfde7209
2011-06-07 10: 35: 40,573 - INFO - <= 200 OK, la lectura de 692 bytes de application / json
2011-06-07 10: 35: 40,574 - INFO - (config / leer) el éxito en 0.931527s
2011-06-07 10: 35: 40,603 - INFO - => PUT https://c2core.opdemand.com/config/ceee3724a3674bc096a2a6d2dfde7209
2011-06-07 10: 35: 41,316 - INFO - <= 200 OK, la lectura de 694 bytes de application / json
{
& Nbsp; "_ id": "ceee3724a3674bc096a2a6d2dfde7209",
& Nbsp; "_ rev": "2-6a1cac4a1851fead776d4184e1218028",
& Nbsp; "access_network": "1.1.1.1/32",
& Nbsp; "access_port": "22",
& Nbsp; "admin_network": "1.1.1.1/32",
& Nbsp; "clone_": {
& Nbsp; "parent_id": "ceee3724a3674bc096a2a6d2dfde7209",
& Nbsp; "parent_impl": {
& Nbsp; "cls_": "c2core.resolve.Config"
& Nbsp;}
& Nbsp;},
& Nbsp; "cloud_name": "nosotros-este-1",
& Nbsp; "doctype": "config",
& Nbsp; "image_id": "ami-06ad526f",
& Nbsp; "impl": {
& Nbsp; "cls_": "c2core.resolve.Config"
& Nbsp;},
& nbsp; "vistas": {
& Nbsp; "7bbeacb1082e4810bb1a6643d024496e": [
& Nbsp; [
& Nbsp; "7bbeacb1082e4810bb1a6643d024496e",
& Nbsp; "config"
& Nbsp;]
& Nbsp;]
& Nbsp;}
}
2011-06-07 10: 35: 41,317 - INFO - (config / actualización) el éxito en 0.730138s
Vuelva a leer la configuración de la plataforma para confirmar el documento principal incluye la configuración anidada actualización:
caja @ usuario: ~ / espacio de trabajo / c2-shell de la plataforma $ c2 leer --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 bastante | grep config
2011-06-07 10: 37: 11,131 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 37: 11,825 - INFO - <= 200 OK, la lectura de 14.852 bytes de application / json
2011-06-07 10: 37: 11,977 - INFO - (plataforma / leer) el éxito en 0.862029s
config.access_network "1.1.1.1/32"
config.image_id "ami-06ad526f"
config.doctype "config"
config._rev "2-6a1cac4a1851fead776d4184e1218028"
config.access_port "22"
config.cloud_name "nosotros-este-1"
config.clone_.parent_id "ceee3724a3674bc096a2a6d2dfde7209"
config.clone_.parent_impl.cls_ "c2core.resolve.Config"
config.admin_network "1.1.1.1/32"
config._id "ceee3724a3674bc096a2a6d2dfde7209"
config.impl.cls_ "c2core.resolve.Config"
config.views.7bbeacb1082e4810bb1a6643d024496e.0.0 "7bbeacb1082e4810bb1a6643d024496e"
config.views.7bbeacb1082e4810bb1a6643d024496e.0.1 "config"
metadata.config_info.access_port "Puerto de escucha en el servidor"
metadata.config_info.access_network "Máscara de red para los usuarios públicos"
metadata.config_info.cloud_name "Nombre de la región AWS"
metadata.config_info.admin_network "máscara de red para los usuarios administradores"
Iniciar la plataforma
Con nuestras credenciales AWS en el lugar, y nuestra plataforma en cola hasta que estemos listos para ir. Emitir un inicio plataforma c2 y dejar que la orquestación empezar:
caja @ usuario: iniciar ~ / espacio de trabajo / c2-shell $ plataforma c2 --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 42: 52,849 - INFO - => POSTE https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e/start
2011-06-07 10: 42: 53,816 - INFO - <= 202 Aceptado, la lectura de 0 bytes de application / json
2011-06-07 10: 42: 53,816 - INFO - (plataforma / start) el éxito en 0.981219s
Para seguir el progreso de la plataforma, lea la representación plataforma completa y grep para el estado de todos los objetos anidados:
caja @ usuario: ~ / espacio de trabajo / c2-shell de la plataforma $ c2 leer --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 bastante | Estado de grep
2011-06-07 10: 43: 06,530 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 43: 07,228 - INFO - <= 200 OK, la lectura de 22.227 bytes de application / json
2011-06-07 10: 43: 07,451 - INFO - (plataforma / leer) el éxito en 0.935643s
tiers.0.status_.value "edificio"
tiers.0.keypair.status_.detail "par de claves creado"
tiers.0.keypair.status_.value "construido"
tiers.0.sg.status_.detail "reglas autorizadas con éxito"
tiers.0.sg.status_.value "construido"
tiers.1.status_.value "edificio"
tiers.1.server.status_.detail "en espera de ejecución, actualmente pendiente"
tiers.1.server.status_.value "edificio"
status_.detail "iniciar la operación activa"
status_.value "de partida"
Podemos ver el estado a nivel de plataforma se está iniciando. Re-edición de este comando varias veces a estado "encuesta". Grepping de estado también es útil para demostrar que los componentes están en periodo de transición. Una vez que la plataforma se hace, el estado debe tener el siguiente aspecto:
caja @ usuario: ~ / espacio de trabajo / c2-shell de la plataforma $ c2 leer --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 bastante | Estado de grep
2011-06-07 10: 44: 21,015 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 44: 21,736 - INFO - <= 200 OK, la lectura de 27.129 bytes de application / json
2011-06-07 10: 44: 21,988 - INFO - (plataforma / leer) el éxito en 0.990599s
tiers.0.status_.detail "inició con éxito"
tiers.0.status_.value "correr"
tiers.0.keypair.status_.detail "par de claves creado"
tiers.0.keypair.status_.value "correr"
tiers.0.sg.status_.detail "reglas autorizadas con éxito"
tiers.0.sg.status_.value "correr"
tiers.1.status_.detail "inició con éxito"
tiers.1.status_.value "correr"
tiers.1.server.status_.detail "oyente listos en 22 / tcp"
tiers.1.server.status_.value "correr"
status_.detail "iniciar la operación exitosa"
status_.value "correr"
Nota un estado de nivel de los padres de "correr" con el oyente servidor listo el 22 / tcp. Nuestra plataforma está lista.
Utilizando la plataforma
Todas las plataformas publican información sobre cómo se utilizan. La mayoría de las plataformas de publicar alguna combinación de:
- URL
- Nombre de host / combinaciones de puertos
- Inicios de sesión
- Las contraseñas
Si leemos la plataforma y grep para publicar podemos ver esta plataforma publicó un sencillo url SSH:
caja @ usuario: ~ / espacio de trabajo / c2-shell de la plataforma $ c2 leer --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 bastante | grep publicar
2011-06-07 10: 51: 30,694 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 51: 31,764 - INFO - <= 200 OK, la lectura de 27.129 bytes de application / json
2011-06-07 10: 51: 32,038 - INFO - (plataforma / leer) el éxito en 1.367026s
tiers.1.server.publish.access_url "ssh: //ubuntu@ec2-50-19-55-84.compute-1.amazonaws.com/"
metadata.publish_info.access_url "URL para acceder a la plataforma"
Un patrón común es para las plataformas de publicación:
- URL de administración
- Admin Login
- Admin Contraseña
- URL de acceso
Parada de la plataforma
Una vez que la plataforma se ha detenido, su estado se verá algo como esto:
caja @ usuario: ~ / espacio de trabajo / c2-shell de la plataforma $ c2 leer --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 bastante | Estado de grep
2011-06-07 10: 57: 51,345 - INFO - => GET https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 57: 52,128 - INFO - <= 200 OK, la lectura de 27.966 bytes de application / json
2011-06-07 10: 57: 52,424 - INFO - (plataforma / leer) el éxito en 1.093576s
tiers.0.status_.detail "detenido correctamente"
tiers.0.status_.value "parado"
tiers.0.keypair.status_.detail "par de claves creado"
tiers.0.keypair.status_.value "parado"
tiers.0.sg.status_.detail "reglas autorizadas con éxito"
tiers.0.sg.status_.value "parado"
tiers.1.status_.detail "detenido correctamente"
tiers.1.status_.value "parado"
tiers.1.server.status_.detail "en espera de detenido, actualmente detenido"
tiers.1.server.status_.value "parado"
status_.detail "operación de parada exitoso"
status_.value "parado"
La plataforma todavía existe en la nube, pero ya no es incurrir en costos informáticos caros (que es, sin embargo incurrir en costos de almacenamiento insignificantes). También estás ya no incurrir en gastos de plataforma C2. En este punto, su plataforma cuesta efectivamente nada.
Las plataformas se pueden detener e iniciar sin límite.
Destruye la plataforma
Para destruir efectivamente todos los componentes de la nube incluidos en su plataforma, debe emitir una plataforma c2 destruir y proporcionar el _id de la plataforma de destino:
caja @ usuario: ~ / / c2-shell de la plataforma $ c2 espacio de trabajo destruye --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 11: 04: 10,667 - INFO - => POSTE https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e/destroy
2011-06-07 11: 04: 11,953 - INFO - <= 202 Aceptado, la lectura de 0 bytes de application / json
2011-06-07 11: 04: 11,953 - INFO - (plataforma / destruir) el éxito en 1.300462s
Eliminar la plataforma
Si usted enumera las plataformas verás que todavía existe la plataforma destruida:
caja @ usuario: ~ / espacio de trabajo / c2-shell lista plataforma $ c2 | c2 bastante
2011-06-07 11: 12: 02,771 - INFO - => GET https://c2core.opdemand.com/platform
2011-06-07 11: 12: 03,149 - INFO - <= 200 OK, leer 1577 bytes application / json
2011-06-07 11: 12: 03,150 - INFO - (plataforma / lista) el éxito en 0.394324s
0.views.7bbeacb1082e4810bb1a6643d024496e.0.0 "7bbeacb1082e4810bb1a6643d024496e"
0.time_.disconnect.date_ "1,307,466,249.487580"
0.time_.stop.date_ "1307465858.607597"
0.time_.start.date_ "1307465019,767619"
0.time_.build.date_ "1307465019,475195"
0.time_.destroy.date_ "1307466249.487347"
0.time_.connect.date_ "1,307,466,240.220381"
0.status_.detail "destruir operación exitosa"
0.status_.value "destruido"
0.doctype "plataforma"
0._rev "7-38fe44c5a900894adf48f4a416c94338"
0.template.cls_ "lib.platform.vanilla.natty.UbuntuNattyPlatform"
0._id "7bbeacb1082e4810bb1a6643d024496e"
0.state.running falsa
0.state.transitioning falsa
0.state.built falsa
0.impl.cls_ "lib.platform.vanilla.natty.UbuntuNattyPlatform"
0.interval_.destroy 9,3936290740966797
0.interval_.stop 33,600441932678223
0.interval_.build 57,54404091835022
0.interval_.start 57,836580991744995
Desde el intervalo se puede ver que tomó:
- 58 segundos para iniciar esta plataforma
- 33 segundos para detenerlo
- 9 segundos para destruirla
Siempre se puede volver a iniciar una plataforma destruida y lo han reconstruir los componentes de la nube de nuevo. Sin embargo, para completar borrar la plataforma y sus documentos anidados, debe emitir una plataforma c2 eliminar:
caja @ usuario: ~ / / c2-shell de la plataforma $ c2 espacio de trabajo eliminar --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 11: 15: 45,235 - INFO - => BORRAR https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 11: 15: 46,474 - INFO - <= 204 Sin contenido, la lectura de 0 bytes de application / json
2011-06-07 11: 15: 46,474 - INFO - (plataforma / eliminar) el éxito en 1.252582s
Para confirmar, podemos ver nuestra lista de la plataforma está vacía:
caja @ usuario: ~ / espacio de trabajo / c2-shell lista plataforma $ c2
2011-06-07 11: 15: 51,890 - INFO - => GET https://c2core.opdemand.com/platform
2011-06-07 11: 15: 52,296 - INFO - <= 200 OK, la lectura de 2 bytes de application / json
2011-06-07 11: 15: 52,297 - INFO - (plataforma / lista) el éxito en 0.423616s
Cierre de sesión
Mediante la emisión de una información c2 podemos ver el estado de la sesión:
caja @ usuario: ~ / espacio de trabajo / c2-shell info $ c2
2011-06-07 11: 17: 11,656 - INFO - => GET https://c2core.opdemand.com/session/73c2e9b49d01c695fb6c74927b8eb0eee5cdc82c2064cd728a8033eb83ea5b95
2011-06-07 11: 17: 12,134 - INFO - <= 200 OK, leer 4082 bytes application / json
{
& Nbsp; "cuenta": "c2-opdemand",
& Nbsp; "correo electrónico": "gabriel@opdemand.com",
& Nbsp; "expires_at": "Viernes, 10 de junio 2011 08:44 AM",
& Nbsp; "session_id": "73c2e9b49d01c695fb6c74927b8eb0eee5cdc82c2064cd728a8033eb83ea5b95"
}
2011-06-07 11: 17: 12,138 - INFO - (info) éxito en 0.497018s
Cierre de sesión de cierre de sesión es simplemente c2:
caja @ usuario: ~ / espacio de trabajo / c2-shell $ c2 cierre de sesión
2011-06-07 11: 17: 44,903 - INFO - => BORRAR https://c2core.opdemand.com/session/73c2e9b49d01c695fb6c74927b8eb0eee5cdc82c2064cd728a8033eb83ea5b95
2011-06-07 11: 17: 45,330 - INFO - <= 204 Sin contenido, la lectura de 0 bytes de application / json
2011-06-07 11: 17: 45,330 - INFO - (terminar) el éxito en 0.443405s
caja @ usuario: ~ / espacio de trabajo / c2-shell info $ c2
2011-06-07 11: 17: 49,025 - INFO - (info) éxito en 0.000376s
Acerca C2
Mando y Control de Tecnología de OpDemand (C2) automatiza el despliegue y la gestión de la infraestructura de cloud computing. Con una interfaz tan simple como "iniciar, detener, clonar y destruir," C2 le da el mando de su nube
Requisitos :.
- Python
Comentarios que no se encuentran