Apagar de forma remota servidores Linux y Windows
Nota: Ésta es la vista de impresión del Manual de referencia completo en una sola página. Si lo prefiere puede encontrar la versión original aquÃ.
1. Introducción
Este manual viene a responder a un problema que tenemos. Cada vez tenemos más servicios, y en consecuencia cada vez necesitamos de más servidores.
Por desgracia, Iberdrola nos corta la luz cuatro o cinco veces al año. Da igual que haya tormenta o no. A veces en invierno, otras en verano, a veces cuando hace frÃo, otras cuando hace calor, otras cuando no hace ni frÃo ni calor. Da igual, cuando "les apetece".
En este tipo de situaciones a veces los cortes duran 10 minutos. Otras una hora, hora y media, ..., lo que haga falta. Cuando los cortes son largos, las UPS se descargan y nos vemos obligados a apagar los servidores.
Para esto existen herramientas "profesionales": Cuando la carga de la UPS baja de un umbral determinado, lanzan la orden de apagado, pero por ahora no tenemos implantado este tipo de control (lo tenemos en la lista de cosas para hacer). Por ahora, cuando se va la luz, tenemos que apagar los servidores a mano y a prisa, antes de que se agoten las UPS.
Para mejorar este proceso, hemos preparado una pequeña automatización. Objetivo: aunque lo hagamos manualmente, que el apagado de los servidores de la red sea lo más rápido posible.
Aqui explicamos como lo hacemos. Si te sirve de algo, nosotros contentos.   ;-)
2. Arquitectura de red
Vamos a imaginar que en nuestra red tenemos 6 servidores, de los cuales 5 son Linux y el sexto es Windows (a que esperas para migrarlo ;) )
Vamos a ponerles nombre:
- LinuxZerb01: IP 192.168.5.1Â (Servidor principal)
- LinuxZerb02: IP 192.168.5.2
- LinuxZerb03: IP 192.168.5.3
- LinuxZerb04: IP 192.168.5.4
- LinuxZerb05: IP 192.168.5.5
- WindowsZerb01: IP 192.168.5.6
- usuario: admin
- password: miclave
3. Apagando los servidores Linux
Objetivo: Ejecutando un único script en el servidor principal, apagaremos el resto de servidores linux.
Manos a la obra.
Es importante que el scritp de apagado no nos pida password. Si lo hiciera nunca podrÃamos automatizarlo (si el dÃa de mañana queremos que se ejecute de forma desatendida ante un aviso de la UPS)
Generamos las claves SSH en el servidor
El servidor principal utilizará SSH para apagar el resto de servidores, o mejor dicho, abrirá una conexión ssh para ejecutar en remoto un script de apagado.
Lo primero que vamos a hacer es crear una clave ssh en la carpeta /root/gakoak (si lo prefieres hazlo en /root/claves, pero en el manual haremos referencia a /root/gakoak). Al crear la clave nos pedirá que introduzcamos una passpharse (clave), pero pulsaremos ENTER (dos veces) sin introducir clave alguna.
[root@LinuxZerb01]# mkdir /root/gakoak
[root@LinuxZerb01]# cd /root/gakoak/
[root@LinuxZerb01 rsync]# ssh-keygen -t dsa -b 2048 -f /root/gakoak/LinuxZerb01-rsync-key
Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): <-- No metas nada, simplemente pulsa ENTER
Enter same passphrase again: <-- No metas nada, simplemente pulsa ENTER
Your identification has been saved in /root/gakoak/LinuxZerb01-rsync-key.
Your public key has been saved in /root/gakoak/LinuxZerb01-rsync-key.pub.
The key fingerprint is:
67:9a:c3:27:ea:36:19:46:bd:31:bd:9b:82:4c:83:52Â root@LinuxZerb01.niredominioa.com
Con esto hemos creado dos claves: la privada (LinuxZerb01-rsync-key) y la pública (LinuxZerb01-rsync-key.pub).
La privada la guardaremos bien sin dársela a nadie, y la pública la iremos repartiendo por los servidores que queremos configurar. En este caso la copiaremos en el servidor LinuxZerb02 vÃa scp:
[root@LinuxZerb01]#Â scp LinuxZerb01-rsync-key.pub root@192.168.5.2:/root/
Una vez copiado, nos conectamos al servidor vÃa ssh con el usuario root, y ponemos la clave pública en el sitio que le corresponde.
Si no existe la carpeta /root/.ssh la creamos
LinuxZerb02:~# cd /root
LinuxZerb02:~#Â mkdir .ssh
LinuxZerb02:~#Â chmod 700 .ssh
LinuxZerb02:~#Â mv LinuxZerb01-rsync-key.pub .ssh
Ahora introducimos la clave pública en el fichero authorized_keys. Si no existÃa, primero lo creamos.
LinuxZerb02:~#Â cd ~/.ssh
LinuxZerb02:~#Â touch authorized_keys
LinuxZerb02:~#Â chmod 600 authorized_keys
LinuxZerb02:~#Â cat LinuxZerb01-rsync-key.pub >> authorized_keys
Repasando: hemos introducido en el fichero authorized_keys la clave pública que previamente habÃamos generado. Al hacer esto, y teniendo en cuenta que al general la clave no le hemos asignado password, podremos conectarnos a este servidor desde cualquier otro siempre que dispongamos de la clave privada. De ahà la importanica de proteger bien la clave privada.
Hagamos una prueba. Vamos al servidor principal Linux y lanzamos este comando:
LinuxZerb01:~#Â Â ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.2
Si todo ha ido bien, nos habremos conectado al servidor LinuxZerb02 (192.168.5.2).
Si, pero con esto establecemos la conexión, no apagamos el servidor, verdad ? tranquilo, que ahora viene esa parte.
Estando conectados al LinuxZerb02, vamos a /root y creamos un scritp que se llama itzali.sh (si quieres puedes llamarlo apagado.sh, pero en el manual hacemos referencia a itzali.sh). Puedes utilizar el editor que más te guste, yo lo hago con nano.
LinuxZerb02:~# cd /root
LinuxZerb02:~# nano itzali.shÂ
En el script escribe estas dos lÃneas:
#!/bin/bash
halt
Ahora guarda el fichero y vamos a asignar los permisos adecuados:
LinuxZerb02:~#Â chmod 744 itzali.shÂ
LinuxZerb02:~#Â chmod 744 itzali.shÂ
Ya está, con esto ya tenemos preparado el script que va a apagar el servidor.
Volvamos al servidor principal (LinuxZerb01).
Antes hemos visto que utilizando las claves pública y privada podemos conectarnos directamente al otro servidor. Utilizando la misma técnica esta vez apagaremos el servidor LinuxZerb02 desde el servidor principal. Cuidado, ten en cuenta que vamos a apagar el servidor !!
LinuxZerb01:~#Â Â ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.2Â Â /root/itzali.sh
Si te fijas verás que es el mismo comando que hemos utilizado antes con la diferencia de que al final le damos el pequeño script de dos lÃneas que hemos preparado para apagar el servidor. Realmente estamos utlizando la conexión ssh para ejecutar un script remoto.
Ahora tendremos que repetir los pasos para el resto de servidores Linux (LinuxZerb03, LinuxZerb04, LinuxZerb05), y una vez hecho esto preparamos en el servidor principal el script para apagarlos todos, que se llamará SarekoZerbitzariakItzali.sh (puedes llamarlo ApagarServidoresRed.sh, aunque en el manual haremos referencia a SarekoZerbitzariakItzali.sh).
root@LinuxZerb01:~# cd /root
root@LinuxZerb01:~# nano SarekoZerbitzariakItzaki.shÂ
Copiamos estas lÃneas en el script:
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.2 /root/itzali.sh
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.3 /root/itzali.sh
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.4 /root/itzali.sh
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.5 /root/itzali.sh
Ahora asignamos los permisos adecuados al scritp:
root@LinuxZerb01:~# chmod 744 SarekoZerbitzariakItzaki.shÂ
Ya está, ya tenemos preparado el script para apagar todos los servidores linux
4. Apagando los servidores windows
Lo que nos falta por acabar es apagar nuestro servidor Windows desde Linux. Para hacerlo utilizaremos samba. Si no lo tienes instalado:
Recordemos los datos que tenÃamos del servidor Windows:LinuxZerb01:~#Â apt-get install samba
Dirección IP: 192.168.5.6
Usuario con permisos: admin
Password del usuario: miclave
Con estos datos, formamos el siguiente comando:
net rpc SHUTDOWN -C "Estamos apagando el servidor" -f -I 192.168.5.6 -U admin%miclave
Cuidado, al hacer esto vamos a apagar el servidor Windows !!!
Ahora solo nos falta volver al servidor principal y añadir esta lÃnea al script principal.
root@LinuxZerb01:~# cd /rootAñadimos la lÃnea:
root@LinuxZerb01:~# nano SarekoZerbitzariakItzaki.shÂ
net rpc SHUTDOWN -C "Zerbitzaria itzaltzen ari gara" -f -I 192.168.5.6 -U admin%nirepasahitzaTodo listo. Ahora si desde el servidor principal ejecutamos el scritp /root/SarekoZerbitzariakItzaki.sh , apagaremos el resto de servidores de la red.
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.2 /root/itzali.sh
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.3 /root/itzali.sh
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.4 /root/itzali.sh
ssh -i /root/gakoak/ LinuxZerb01-rsync-key 192.168.5.5 /root/itzali.sh
5. Créditos y licencia
Autor: Pedro Arreitunandia
Fecha: 2009-ko urtarrilaren 20a
Licencia: Creative Commons by-sa/2.0
Para contactar conmigo: parreitu [abildua] gmail.com
Te puedes imaginar lo que significa [abildua] en euskera. ;)