
En un principio pensé compartir código fuente de los scripts de lo que uso para tal fin, sin embargo, no en todos los ámbitos hay más 30 pcs u se segmenta las direcciones Ips en sub-redes. Así que
mejor muestro parcialmente código para que se pueda adaptar a su ámbito u necesidad. Claro, ando en un dominio Windows con más de 60 pcs y una clara distribución de ips/pcs vía unidad organizativa y con la limitante de estar pensando en ahorrar energía eléctrica.De por sí esa es la inicial necesidad. No dedicaré algo para explicar comandos de Windows, puesto que, ya hay mucha documentación al respeto.
Para comenzar debemos pensar en como esta organizada las oficinas, salas, salones , subredes u algún otro nombre de la unidad organizativa con respecto a los rangos de ips así como la terminología para poder apagar la pc. Esto ayudará a generar validaciones en los scripts a usar. La pc destino debe tener al menos las opciones de "Compartir archivos e impresoras" en el firewall (en Windows 7 añadir la opción de administración remota ) en el caso de que se requiere el firewall activo. Y por supuesto, login y password con privilegios administrativos de dominio/grupo de trabajo.
Como la pc en donde estará los scripts es Linux , deberíamos tener instalado Samba y configurado en /etc/samba/smb.conf la opcion 'workgroup'
de la siguiente forma:
[global]
workgroup = NOMBRE_DEL_DOMINIO
En este post asumo que las pcs se organizan en subredes , pudiendo ser oficinas, aulas, salas; que cada subred tiene un numero limite , que las pcs tienen ips fijas y que cada subred posee como ip inicial en algún octeto ,1,
Hago la salvedad que podemos apagar la(s) pc(s) de forma selectiva o de forma directa. En la forma directa, indicamos que queremos apagar las sin importar si las pc(s) esta siendo usada por usuario(s).
En un proximo post , indicaré una variante , apagamos la pc siempre que en este ,no haya sesión abierta . Para esta forma , usare un paquete que envía comandos a Windows.(Oh lala )
Apagando una sóla pc
Llamemos apagar_pc.sh a este script que pudiera ser de esta forma
#! /bin/bash
net rpc shutdown -I $1 -C "Apagando PC" -t 8 -U usuario%'contraseña' -f | grep -v Shutdown
blue='\e[1;34m'
NC='\e[0m'#No Color
echo -e "${blue}Comando de apagado aplicado a $1 ${NC}"
Y se usaría de la siguiente forma
./apagar_pc.sh IP
Siendo la IP , el parámetro de entrada . El uso de echo -e es meramente decorativo pero útil en el caso de usarse con otras scripts.
Aja, ¿y para un conjunto de pcs?
Se puede hacer un script para aquellas pcs que estén encendidas en una misma subred, por lo que deberemos de saber como esta organizadas para asignarle un numero, ejemplo, subred 1 , subred 2 , siendo cada subred un rango de ip ; basado en ese rango podemos validar un limite que es refrente al numero de pcs presente en cada una de ellas, ejemplo la subred 1 tiene 24 pcs, la subred 2 tiene 15 pcs y así sucesivamente. Un idea lo que quiero decir puede ser este script , llamado apagar_subred.sh
Apagando varias pcs
#! /bin/bash
if [[ $EUID -ne 0 ]]; then
echo "Root requerido!!!"
exit 1
fi
##Este if es requerido para usar nmap
if [ $1 'no es un valor correcto' ];
then
exit
fi
##El if anterior validaría subredes
if [ $1 -eq 1 ]; then
limit=24
fi
if [ $1 -eq 2 ] ; then
limit=15
fi
##Habría n condicionales como subredes hubiese si son limites dispares, esto define un valor que le pasaremos a nmap
lista=`nmap -sn Rango$1 -$limit -pr | grep report | awk {'print $5'}`
##En esta linea, limit es el valor limite del rango de la SubRed numero X
##
##Ejemplo de rango 192.168.1.1-24
##
## Nmap es usado para detectar pcs encendidas en un rango de ip por ARP,
## el filtrado grep sería usado para obtener la línea que reporta ejemplo
##sudo nmap -sn 192.162.1.1-24 -pr | grep report
##Nmap scan report for 192.162.1.5
##Nmap scan report for 192.162.1.6
##Nmap scan report for 192.162.1.11
##Nmap scan report for 192.162.1.20
##
## Awk facilitaría la obtención de la ip que esta "viva"
vector=($lista)
fin=${#vector[*]}
echo "Pcs detectadas en subred $1 ::: $fin "
##El uso de nmap nos dejo como resultado , una cadena, por lo que sería ##muy útil pasar la data recolectada a un vector para uso posterior
if [ $fin -eq 0 ] ; then
exit
fi
##Si no se detectó pcs encendidas, termina el script
for (( i=0; i<$fin; i++ ));
do
./apagar_pc.sh ${vector[$i]} &
done
wait
echo "Subred $1 Revisada"
exit 0
## Este loop haría efectivo un apagado de sólo las pcs que están
## encendidas.
## Observase que al final de la línea de "./apagar_pc.sh " hay un et (en
## ingles ampersand ) , esto ejecuta en segundo planos los comandos a
## modo de
## hilos y el wait es la señal de parada de cada hilo.
Una idea uso sería sudo ./apagar_subred.sh 1
¿Les gusto? El otro post es muy similar.











0 comentarios:
Publicar un comentario