Benvingudes i benvinguts al portal Linkat

La Linkat és la distribució educativa de GNU/Linux que ha iniciat i ofereix el Departament d'Educació a la comunitat educativa. Es tracta d'un projecte de programari lliure que permet als centres educatius, però també a tota la societat, tenir accés de forma legal, gratuïta i amb suport tècnic professional, a un conjunt molt ampli d'aplicacions: educatives, d'ofimàtica, d'Internet, multimèdia...

[resolt] Algun Script per apagar màquines?  Final

Vés a la pàgina 1 - 2 [+1]:

  • A vegades no s'apaguen les màquines de l'aula, i sovint ho faig manualment amb SSH posant la ip i escrivint la contrasenya, després amb un halt i surto.
    Voldria automatitzar-ho una mica. A veure si algú sap alguna manera via script per apagar unes màquines concretes. La idea és que les màquines que van de 192.168.0.180/195 s'apaguin executant un script.
    La segona part seria, que després des del servidor via cron(tab) fer que les apagui en una hora concreta.

    Fins ara he trobat alguna cosa, però fent claus ssh i anant client per client i servidor. Jo voldria alguna cosa que només amb la ip i el password (que totes tenen igual) ja em servís.

    Moltes gràcies!
  • De moment m'he fet aquest Script que ja m'apaga una sóla màquina, ara hem cal fer que agafi tot el rang des de 192.168.0.180 fins a 192.168.0.192...

    Code

    #!/usr/bin/expect -f
    # Autor: Manel Sales msales24 llicència:GPLv3 http://www.gnu.org/licenses/gpl-3.0-standalone.html
    # Script per apagar via SSH les màquines, Octubre 2012
    #
    # cal tenir instal·lat el paquet "expect" sinó fem un>> zypper in expect
    # ens avisa que apagarà i continua
    send "Apagant els clients..."
    #
    # rang de la ip per exemple la IP 192.168.0.189
    set ip "192.168.0.189"
    # definim el client
    # usuari nom de l'usuari administrador
    set usuari "nom"
    # contrasenya de l'administrador, per exemple 1234
    set password "1234"
    # crida al client
    spawn ssh $usuari@$ip
    #
    # si no hem accedit mai ens preguntarà si volem continuar i espera la pregunta de la contrasenya i respon
    expect {
        "Are you sure you want to continue connecting (yes/no)?" {
        send -- "yes\r"}
        "Password:"  {
        send -- "${password}\r"}
        }
    # permet interactuar
    # interact
    # ---- fins aquí podríem connectar-nos sense haver d'apagar, només cal comentar tot el que segueix ----
    # ara espera entrar al root, espera el símbol de sistema # i...
    expect "# "
    # mana l'ordre d'apagar
    send -- "halt\r"
    # i ara sortim de la màquina i script
    expect "# "
    send -- "exit\r"
    #### ---- fins aquí comentaria si només vull connectar-me i no apagar
    expect eof


    Ara ho tinc desat com a apagar.exp i amb permisos d'execució poso a la terminal:

    Code

    expect apagar.exp

    o tambér podem executar com:

    Code

    ./apagar.exp

    i apaga la màquina.
    Una altra opció és canviar les línies:

    Code

    # rang de la ip per exemple la IP 192.168.0.189
    set ip "192.168.0.189"


    per

    Code

    # si volem cridar la ip des de la comanda activem la següent ordre i executem ./apagar.exp 192.168.0.194 a la terminal
    set ip [lindex $argv 0]

    i ho executem com:

    Code

    ./apagar.exp 192.168.0.194

    Així podem indicar la IP de la màquina que volem apagar en cada cas.
    Si algú el vol millorar, perfecte!!!
    Manel Sales



    Editat per msales24 el 26/Oct/2012 - 14:16.
  • Gràcies Manel,

    Segur que més d'una persona ho farà servir.

    Salut.

    Projecte Linkat
  • Gràcies Manel !

    Al centre tinc una entrada al cron que atura les màquines a una hora determinada. També ho tinc als servidors de terminals però a aquests, a més, tinc una entrada a la bios que engega els servidors de terminals, de dilluns a divendres, 15 minuts abans de començar les classes.

    A més, a les aules d'informàtica hi tenim interruptors perquè tot quedi aturat tant aviat com s'ha acabat la classe, així no queden 'leds' ni aparells en funcionament.

    Continuant amb temes de racionalització del consum enerègetic, a la connexió dels punts wifi hi tenim un rellotge que només els manté engegats mentre el centre és obert.
  • Gràcies ldalmau,
    penso que és molt important la idea que dones sobre la racionalització del consum elèctric.
    I és més, aquests dies de tempestes en alguns centres hem tingut problemes amb aparells que s'havien quedat encesos (stand-by) i la tronada els ha malmés. Crec que tenir rellotges que engeguen o apaguen és una molt bona idea!

    La idea de l'Script és senzilla, només a partir de les ip poder aturar una màquina, ja que al centre no ho tenim per DHCP. El cron a les màquines de forma individual és una opció que havia fet però pensant-ho millor, l'ideal crec que és poder modificar únicament un script sense haver de tocar res a cap lloc, i des del servidor, poder apagar totes, o la que volguem. Amb el cron al servidor queda tot el centre automatitzat.

    Només em queda millorar l'script per a que pugui marcar un rang d'ips concretes. A veure si algú s'anima!

    Salut!
    Manel
  • Si poses el rang d'IP amb un guió interior (120-260 per exemple) no et funciona?
    Una altra opció podria ser detectar totes les IP de la xarxa amb nmap -f.
    Tens més opcions per a nmap aquí.



    Editat per fteruelo el 01/Nov/2012 - 10:15.
  • Una idea millor amb una modificació bàsica del'script:

    Un bucle (while) amb els valors de les IP afectades que passi a la variable amb un condicional per si la màquina és apagada que no s'esperi. Sembla la solució més senzilla i reaprofites el codi que ja tens preparat.

    Ja em diràs.

    PS: De tota manera i com a redundància de seguretat, el tancament programat a cada màquina uns deu minuts després de la crida oficial del servidor per si de cas no l'anul·laria; si no funciona l'un, funciona l'altre.



    Editat per fteruelo el 05/Nov/2012 - 06:52.
  • Gràcies ftruelo,

    la idea de nmap era la que estava barallant creant un segon script en bash que cridés el primer, però al final ho he deixat per massa scripts. Busco alguna cosa més simple, si es pot fer amb una cosa millor que amb dues :-) i com que les ip ja les sé, no cal buscar-les, és un rang concret.
    La idea del bucle és bona, només amb les ip que vull.... miraré de buscar una estona i fer-ho.
    El que dius de la redundància de seguretat hem sembla perfecte!

    Manel Sales
  • Hola Manel,

    Be no se si et servirà, aquesta setmana he publicat com treure una finestra per avisar que es tanquen les màquines, ho he publicat al meu bloc.

    http://tecnocat.blogspot.com.es/2012/11/linux-cron-executar-programes-grafics.html

    Bespres tinc al crontab de cada màquina que s'aturi a una hora concreta per exemple a les 6:

    00 18 * * * * root shutdown -h now

    i així m'asseguro que no quedin màquines posades en funcionament a la nit.

    No se si es el que cercaves, però es una altra opció.

    Josep M Sardà
    Coordinador Informàtica
    IES Ramon Turró i darder
  • Hola Manel,


    Ja us compartiré uns scripts que tinc que fa el següent:

    1- Comparteix claus ssh per la qual cosa els scripts es simplifiquen molt
    2- Fa un escanneig de la xarxa cercant els ordinadors que tenen el port 22 d'ssh obert
    3- Permet executar ordres remotes per la qual cosa podem aturar les màquines (shutdown -h now) o bé instal·lar programes, etc (tot dependrà del que li poseu a dins).

    Aquests scripts son una mena de plantilla que us permetrà executar ordres remotes. Ara bé, haureu d'emplenar la part corresponent a l'acció que voleu dur a terme.


    Us els publicaré i us els comentaré (segurament m'haureu sentit a dir ...la màquina de fer xurros...o sigui que són aquests scripts ;-)


    Joan
  • Hola Manel,


    T'he deixat a:

    http://goo.gl/FnTl0

    (és el meu compte de dropbox)

    els scripts fer fer gestió centralitzada de les màquines Linkat.

    Com veuràs, el paquet tar.gz conté dos scripts:

    L'script ssh_distribueix_claus.sh s'encarrega d'escannejar la xarxa 192.168.0.0/24 (definida a la variable XARXA), i copiar la clau pública ssh. Si fem un petit recordatori, la generació del parell de claus pública/privada es fa a través de l'ordre: ssh-keygen. Doncs aquest script mira dins de la xarxa quines màquines tenen el port 22 obert (port d'ssh i per tant màquina amb Linkat).

    Un cop s'ha fet el repartiment de la clau pública (recorda de generar-la abans tal i com t'he comentat) tens un altre script d'exemple que he anomenat ssh_canvi_contrasenya.sh. Aquest script l'agafes com a model ja que el que fa és escannejar la xarxa, connectar-se remotament via ssh i després executa una acció. En el cas de l'exemple, l'acció és de canviar la contrasenya de root dels ordindors remots.

    Espero que siguin útils aquests scripts (aka màquina de fer xurros ;-) ). La meva recomanació és que, abans de fer qualsevol acció massiva dins del centre, ho proveu amb un ordinador de proves.

    :-)



    Joan
  • Gràcies Josep M,
    el tema d'apagar-los amb el cron ja ho tenia present, però entre sessions de classes em quedaven oberts, i amb l'script que he fet al principi em va bé, ja que mentre es recull la classe l'executo i s'apaguen totes les màquines. La meva idea principal era poder decidir quan volia apagar-les, que pot variar...
    Ara em queda per al nadal que executi una sèrie seguida de màquines a partir d'una llista que es detecti de màquines engegades, tipus nmap 0.0.0.0/24 > llista.txt i després un ./apagar.exp llista.txt (alguna cosa +/-)... ja veure'm.

    Gràcies pel post al bloc!
    Molt interessant
    Manel
  • Hola Joan,

    ja m'he abaixat els scripts!
    em sembla molt interessant les possibilitats que ofereixen, ara cal fer proves (controlades). Executant el segon script per apagar podria ser una molt bona opció per al que vull fer!

    Moltes gràcies Joan

    Manel
  • Hola Manel,

    Correcte, si t'hi fixes, al segon script només hauries de posar l'ordre shudown o halt.

    Si vols provar això:

    ssh -o StrictHostKeyChecking=no -o BatchMode=yes $USUARI@$IP "/sbin/halt"


    et tancarà les màquines de forma immediata.

    Fixa't bé que l'ordre que hem de posar es troba al final i entre cometes. La part inicial (ssh -o StrictHostKeyChecking=no -o BatchMode=yes) s'ha de posar perquè és l'ordre que et permet executar coses en remot.

    ;-)



    Joan
  • Hola Joan,
    Ara estic fent les proves ...
    Mirant el 2n Script veig el perill que apagui el servidor també!?
    El primer Script combina el llenguatge expect amb l'nmap... sembla que amb el primer script serviria, només canviant les comandes de crear les claus de ssh per la comanda d'apagar? estic en el cert?
    Com que l'nmap fa un escaneig de tota la xarxa, agafa totes les màquines... veig que s'hauria de canviar la comanda per que només apagui un rang concret.

    Gràcies,

    Manel

Vés a la pàgina 1 - 2 [+1]:

  • 0 usuaris

Aquesta llista mostra els usuaris actius durant els darrers 20 minuts.