Il progetto OpDemand Shell contiene l'interfaccia client a riga di comando per il sistema di C2. Questi moduli Python sono parte di Command & Control Technology (C2) di OpDemand.
Open Source
Il progetto c2-shell è stato reso open source da OpDemand.
C2 Shell Documentazione
Prima di iniziare
- Avrete bisogno di un account C2 attiva. Creare uno gratuitamente presso https://c2.opdemand.com/
- Istruzioni assumono OSX o Linux (Windows non è stato testato, ma dovrebbe funzionare)
Installazione
Installazione utilizza distutils standard di convenzione.
sudo python setup.py install
Configurazione
Aggiungi il tuo indirizzo e-mail C2 accesso alla configurazione del client locale.
set locale c2 --email=c2user@opdemand.com
Un get locale c2 mostrerà configurazione corrente.
Accesso In
Emettere un login c2, che utilizzerà l'indirizzo email configurato sopra e richiederà una password.
user @ scatola: ~ / workspace / c2-shell $ c2 login
Password:
2011-06-07 08: 44: 12.052 - INFO - => POST 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, leggere 1822 byte di application / json
[# Lista JSON di modelli
& Nbsp; {
& Nbsp; # First template
& Nbsp;},
& Nbsp; {
& Nbsp; # secondo modello
& Nbsp;}
]
2011-06-07 09: 21: 21.881 - INFO - (template / list) successo in 0.524872s
Trovare il valore _id del modello che si desidera distribuire, e copiarlo negli appunti.
Creare una nuova piattaforma
Selezionare il modello desiderato e rilasciare un carico modello c2 del _id template, che creerà una piattaforma nuova.
user @ scatola: ~ / workspace / c2-shell template $ c2 carico --_ id = 6c86dfc5ddfe464199021b8dcaf521a2
2011-06-07 09: 42: 36.711 - INFO - => POST https://c2core.opdemand.com/template/6c86dfc5ddfe464199021b8dcaf521a2/load
2011-06-07 09: 42: 38.606 - INFO - <= 201 Creato, la lettura di 14.850 byte di application / json
{
& Nbsp; # Molto più rappresentazione JSON del modello
}
2011-06-07 09: 42: 38.757 - INFO - (template / carico) successo in 2.061932s
Piattaforme List
Emettere un elenco piattaforma c2 per vedere le piattaforme disponibili nel tuo account.
user @ scatola: ~ / workspace / c2-shell $ c2 lista piattaforma
2011-06-07 09: 46: 48.327 - INFO - => GET https://c2core.opdemand.com/platform
2011-06-07 09: 46: 48.884 - INFO - <= 200 OK, leggere 566 byte di application / json
[
& Nbsp; {
& Nbsp; # Your nuova piattaforma
& Nbsp;}
]
2011-06-07 09: 46: 48.885 - INFO - (piattaforma / list) successo in 0.572228s
Copiare il _id di questa piattaforma negli Appunti.
Leggi la piattaforma
Elenco operazioni mostrano solo rappresentazioni sommarie di elementi in una collezione. Per visualizzare la rappresentazione completa di una piattaforma (quella che comprende le sue componenti nidificati) è necessario rilasciare una piattaforma c2 leggere e fornire la _ID:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ 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, leggendo 14850 byte di application / json
{
& Nbsp; # rappresentazione piattaforma completa
}
2011-06-07 10: 16: 07.152 - INFO - (piattaforma / lettura) successo in 1.117754s
Lavorare con le risposte JSON
La piattaforma di cui sopra è troppo lungo da leggere. Fortunatamente il guscio C2 include un prettifier integrato JSON che rende uscita JSON da qualsiasi comando di shell C2 molto più facile da leggere.
Basta tubo qualsiasi comando c2 a C2 abbastanza:
user @ scatola: ~ / workspace / c2-shell $ template c2 leggere --_ id = 6c86dfc5ddfe464199021b8dcaf521a2 | C2 abbastanza
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, leggere 12.022 byte di application / json
2011-06-07 09: 32: 01.535 - INFO - (template / lettura) successo in 0.904613s
tiers.0.name "Network Tier"
tiers.0.doctype "tier"
tiers.0._rev "1-5a37d211b276deee536cd72a016af8fa"
... Resto di prettified JSON
Tutti i comandi C2 letti dallo standard input e scrivere sullo standard output. Ciò significa JSON crudo e JSON prettified possono essere convogliati a qualsiasi altro comando che utilizza tubi in stile UNIX. (Ad esempio grep).
Configurare la piattaforma
Prima di leggere la piattaforma e grep per le informazioni di configurazione di default:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ id = 7bbeacb1082e4810bb1a6643d024496e | C2 pretty | 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, leggendo 14850 byte di application / json
2011-06-07 10: 26: 30.635 - INFO - (piattaforma / lettura) successo in 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 "noi-est-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 "Porta di ascolto sul server"
metadata.config_info.access_network "maschera di rete per gli utenti pubblici"
metadata.config_info.cloud_name "Nome della regione AWS"
metadata.config_info.admin_network "maschera di rete per gli utenti di amministrazione"
Facciamo limitare tutti gli accessi di rete a un host - 1.1.1.1/32. Ciò richiederà la modifica delle chiavi access_network e admin_network.
Poiché config è un documento nidificato con la propria _id e _rev, dobbiamo modificare direttamente il documento di configurazione. Per fare questo, seguiamo la convenzione RESTful della lettura della rappresentazione e una pipe ad un'operazione di aggiornamento:
user @ scatola: ~ / workspace / c2-shell $ c2 config leggere --_ id = ceee3724a3674bc096a2a6d2dfde7209 | Aggiornamento c2 config - --access_network = 1.1.1.1 / 32 --admin_network = 1.1.1.1 / 32
2011-06-07 10: 35: 39.643 - INFO - lettura oggetto da stdin, ctrl-c per rompere ...
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, leggere 692 byte di application / json
2011-06-07 10: 35: 40.574 - INFO - (config / lettura) successo in 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, leggere 694 byte di 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": "noi-est-1",
& Nbsp; "DOCTYPE": "config",
& Nbsp; "image_id": "ami-06ad526f",
& Nbsp; "impl": {
& Nbsp; "cls_": "c2core.resolve.Config"
& Nbsp;},
& nbsp; "viste": {
& Nbsp; "7bbeacb1082e4810bb1a6643d024496e": [
& Nbsp; [
& Nbsp; "7bbeacb1082e4810bb1a6643d024496e",
& Nbsp; "config"
& Nbsp;]
& Nbsp;]
& Nbsp;}
}
2011-06-07 10: 35: 41.317 - INFO - (config / update) successo in 0.730138s
Rileggere la configurazione della piattaforma per confermare il documento principale include la versione aggiornata, configurazione nidificato:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ id = 7bbeacb1082e4810bb1a6643d024496e | C2 pretty | 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, leggere 14.852 byte di application / json
2011-06-07 10: 37: 11.977 - INFO - (piattaforma / lettura) successo in 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 "noi-est-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 "Porta di ascolto sul server"
metadata.config_info.access_network "maschera di rete per gli utenti pubblici"
metadata.config_info.cloud_name "Nome della regione AWS"
metadata.config_info.admin_network "maschera di rete per gli utenti di amministrazione"
Avviare la piattaforma
Con le nostre credenziali AWS in atto, e la nostra piattaforma in coda fino siamo pronti ad andare. Emettere un inizio piattaforma c2 e lasciare che l'orchestrazione inizia:
user @ scatola: inizio ~ / workspace / c2-shell $ piattaforma c2 --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 10: 42: 52.849 - INFO - => POST https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e/start
2011-06-07 10: 42: 53.816 - INFO - <= 202 accettate, leggendo 0 byte di application / json
2011-06-07 10: 42: 53.816 - INFO - (piattaforma / start) successo in 0.981219s
Per seguire i progressi della piattaforma, di leggere la rappresentazione piattaforma completa e grep per lo stato di tutti gli oggetti nidificati:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ id = 7bbeacb1082e4810bb1a6643d024496e | C2 pretty | grep stato
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, leggere 22.227 byte di application / json
2011-06-07 10: 43: 07.451 - INFO - (piattaforma / lettura) successo in 0.935643s
tiers.0.status_.value "building"
tiers.0.keypair.status_.detail "coppia di chiavi creato"
tiers.0.keypair.status_.value "costruito"
tiers.0.sg.status_.detail "regole autorizzati di successo"
tiers.0.sg.status_.value "costruito"
tiers.1.status_.value "building"
tiers.1.server.status_.detail "in attesa di esecuzione, attualmente in sospeso"
tiers.1.server.status_.value "building"
status_.detail "start operazione avviata"
status_.value "a partire"
Possiamo vedere lo stato a livello di piattaforma sta iniziando. Re-questo comando un certo numero di volte per lo stato "sondaggio". Grep per lo stato è utile anche per dimostrare quali componenti sono attualmente in fase di transizione. Una volta che la piattaforma è fatto, lo stato dovrebbe essere il seguente:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ id = 7bbeacb1082e4810bb1a6643d024496e | C2 pretty | grep stato
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, leggere 27.129 byte di application / json
2011-06-07 10: 44: 21.988 - INFO - (piattaforma / lettura) successo in 0.990599s
tiers.0.status_.detail "ha iniziato con successo"
tiers.0.status_.value "correre"
tiers.0.keypair.status_.detail "coppia di chiavi creato"
tiers.0.keypair.status_.value "correre"
tiers.0.sg.status_.detail "regole autorizzati di successo"
tiers.0.sg.status_.value "correre"
tiers.1.status_.detail "ha iniziato con successo"
tiers.1.status_.value "correre"
tiers.1.server.status_.detail "ascoltatore pronto in 22 / tcp"
tiers.1.server.status_.value "correre"
status_.detail "operazione avviare con successo"
status_.value "correre"
Nota uno stato-livello padre di "correre" con l'ascoltatore server di pronto il 22 / tcp. La nostra piattaforma è pronta.
Utilizzando la piattaforma
Tutte le piattaforme pubblicano informazioni su come vengono utilizzati. La maggior parte delle piattaforme di pubblicare una combinazione di:
- URL
- hostname / combinazioni di porte
- Login
- Le password
Se leggiamo la piattaforma e grep per pubblicare possiamo vedere questa piattaforma ha pubblicato una semplice url SSH:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ id = 7bbeacb1082e4810bb1a6643d024496e | c2 pretty | grep pubblicare
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, leggere 27.129 byte di application / json
2011-06-07 10: 51: 32.038 - INFO - (piattaforma / lettura) successo in 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 per accedere alla piattaforma"
Un modello comune per le piattaforme di pubblicare:
- URL di amministrazione
- Admin Login
- Admin Password
- URL di accesso
Fermare la piattaforma
Una volta che la piattaforma si è fermato, il suo status sarà simile a questa:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 leggere --_ id = 7bbeacb1082e4810bb1a6643d024496e | C2 pretty | grep stato
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, leggere 27.966 byte di application / json
2011-06-07 10: 57: 52.424 - INFO - (piattaforma / lettura) successo in 1.093576s
tiers.0.status_.detail "fermato con successo"
tiers.0.status_.value "fermato"
tiers.0.keypair.status_.detail "coppia di chiavi creato"
tiers.0.keypair.status_.value "fermato"
tiers.0.sg.status_.detail "regole autorizzati di successo"
tiers.0.sg.status_.value "fermato"
tiers.1.status_.detail "fermato con successo"
tiers.1.status_.value "fermato"
tiers.1.server.status_.detail "in attesa di arrestato, attualmente ferma"
tiers.1.server.status_.value "fermato"
status_.detail "operazione di arresto di successo"
status_.value "fermato"
La piattaforma esiste ancora nel cloud, ma non è più sostenere costi di elaborazione costosi (si tratta, tuttavia incorrere in costi di storage trascurabili). Sei anche più sostenere costi di piattaforma C2. A questo punto, la vostra piattaforma costa effettivamente nulla.
Le piattaforme possono essere fermati e avviati senza limiti.
Distruggere la piattaforma
Per distruggere in realtà tutti i componenti inclusi nella nuvola vostra piattaforma, è necessario rilasciare una piattaforma c2 distruggere e fornire il _id della piattaforma di destinazione:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 distruggere --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 11: 04: 10.667 - INFO - => POST https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e/destroy
2011-06-07 11: 04: 11.953 - INFO - <= 202 accettate, leggendo 0 byte di application / json
2011-06-07 11: 04: 11.953 - INFO - (piattaforma / distruggere) il successo in 1.300462s
Eliminare la piattaforma
Se si elenca le piattaforme vedrete che la piattaforma distrutta esiste ancora:
user @ scatola: ~ / workspace / c2-shell lista piattaforma $ c2 | c2 abbastanza
2011-06-07 11: 12: 02.771 - INFO - => GET https://c2core.opdemand.com/platform
2011-06-07 11: 12: 03.149 - INFO - <= 200 OK, leggere 1577 byte di application / json
2011-06-07 11: 12: 03.150 - INFO - (piattaforma / list) successo in 0.394324s
0.views.7bbeacb1082e4810bb1a6643d024496e.0.0 "7bbeacb1082e4810bb1a6643d024496e"
0.time_.disconnect.date_ "1307466249,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_ "1307466240,220381"
0.status_.detail "distruggere buon funzionamento"
0.status_.value "distrutto"
0.doctype "piattaforma"
0._rev "7-38fe44c5a900894adf48f4a416c94338"
0.template.cls_ "lib.platform.vanilla.natty.UbuntuNattyPlatform"
0._id "7bbeacb1082e4810bb1a6643d024496e"
0.state.running falso
0.state.transitioning falso
0.state.built falso
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
Dal intervallo si può vedere ci sono voluti:
- 58 secondi per avviare questa piattaforma
- 33 secondi per fermarlo
- 9 secondi per distruggerla
È sempre possibile riavviare una piattaforma distrutta e lo hanno ricostruire nuovamente i componenti cloud. Tuttavia per completare eliminare la piattaforma ei documenti nidificati, è necessario rilasciare una piattaforma c2 eliminare:
user @ scatola: ~ / workspace / c2-shell piattaforma $ c2 eliminare --_ id = 7bbeacb1082e4810bb1a6643d024496e
2011-06-07 11: 15: 45.235 - INFO - => ELIMINA https://c2core.opdemand.com/platform/7bbeacb1082e4810bb1a6643d024496e
2011-06-07 11: 15: 46.474 - INFO - <= 204 No Content, leggendo 0 byte di application / json
2011-06-07 11: 15: 46.474 - INFO - (piattaforma / eliminare) il successo in 1.252582s
Per confermare, possiamo vedere la nostra lista piattaforma è ora vuota:
user @ scatola: ~ / workspace / c2-shell $ c2 lista piattaforma
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 lettura di 2 byte di application / json
2011-06-07 11: 15: 52.297 - INFO - (piattaforma / list) successo in 0.423616s
Disconnessione
Con l'emissione di un Info c2 possiamo vedere lo stato della nostra sessione:
user @ scatola: ~ / workspace / c2-shell informazioni $ 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, leggere 4082 byte di application / json
{
& Nbsp; "conto": "c2-opdemand",
& Nbsp; "email": "gabriel@opdemand.com",
& Nbsp; "expires_at": "Venerdì 10 Giugno 2011 08:44",
& Nbsp; "session_id": "73c2e9b49d01c695fb6c74927b8eb0eee5cdc82c2064cd728a8033eb83ea5b95"
}
2011-06-07 11: 17: 12.138 - INFO - (info) successo in 0.497018s
La disconnessione è di logout semplicemente c2:
user @ scatola: ~ / workspace / c2-shell $ c2 Logout
2011-06-07 11: 17: 44.903 - INFO - => ELIMINA https://c2core.opdemand.com/session/73c2e9b49d01c695fb6c74927b8eb0eee5cdc82c2064cd728a8033eb83ea5b95
2011-06-07 11: 17: 45.330 - INFO - <= 204 No Content, leggendo 0 byte di application / json
2011-06-07 11: 17: 45.330 - INFO - (logout) successo in 0.443405s
user @ scatola: ~ / workspace / c2-shell informazioni $ c2
2011-06-07 11: 17: 49.025 - INFO - (info) successo in 0.000376s
Informazioni C2
Command & Control Technology OpDemand (C2) automatizza la distribuzione e la gestione di infrastrutture di cloud computing. Con un'interfaccia semplice come "start, stop, clone e distruggere," C2 si dà il comando della tua nuvola
Requisiti :.
- Python
I commenti non trovato