"Después del juego es antes del juego"
Sepp Herberger

miércoles, 12 de junio de 2019

Conexión automática a red Wifi

Ahora que llegan las vacaciones viene bien dar un repaso a todos los portátiles de los alumnos: ejecutar puppet, pkgsync, limpiar los usuarios cacheados,... No solo eso, también durante el curso de vez en cuando nos toca actuar sobre todos los portátiles de un armario para aplicar alguna configuración que nos han pedido o que soluciona un bug pendiente.

Hasta ahora para tener conectividad tras encender los portátiles había 2 alternativas:
  1. Conectarlos por red cableada a las tomas del suelo o un switch del aula.
  2. Iniciar sesión en cada uno de ellos y conectarlos manualmente a la red Wifi del aula.
Evidentemente ambas opciones son bastante reiterativas y aburridas. Lo ideal sería que para estos casos los portátiles se conectasen de forma autónoma a una red wifi y nosotros pudiesemos manejarlos de forma masiva con tmux-cssh.

Y esa es la idea de este post: basándome en un script de conexión que usa en su centro nuestro compañero Esteban lo he adaptado para que se conecte de forma autónoma a una red wifi concreta predefinida tan pronto como la detecte.

El código del script es (nota: he corregido algunas erratas en el script el 8/10/2019):
# cat /usr/local/bin/conecta-default-wifi
#!/bin/bash

idioma=$LC_ALL
export LC_ALL=C

wifi_maestra="WIFI_AULAS"
wifi_key="a12345678"
nombre_conexion="ies"

activado=$(nmcli radio wifi)
if [ "$activado" != "enabled" ]
then
    nmcli radio wifi on #activamos la wifi si no lo esta
fi
conectado=$(nmcli dev status | grep wifi |  grep -w -e 'connected' -e "conectado" | awk ' {print $4}')
if  [ "$conectado" != "$nombre_conexion" ]  # Si no estamos conectados a la wifi maestra...
then
      definida=$(nmcli con | grep wifi | grep -w "$nombre_conexion") #Si ya se definió la conexión en network manager la quitamos, para crearla de nuevo cuando nos conectemos
      if [ -n "$definida" ]
      then
          nmcli con delete "$nombre_conexion"conecta-default-wifi
      fi

      detectada=$(nmcli -f SSID,BSSID,SIGNAL,SECURITY dev wifi list | grep -w "$wifi_maestra")
      if [ -n "$detectada" ]  # Si la wifi maestra está al alcance....
      then
            #Si la wifi maestra está al alcance y no estamos en ella, conectamos automaticamente.
            nmcli dev wifi con "$wifi_maestra" password "$wifi_key" name "$nombre_conexion"
            #Si ya existiese la conession podriamos hacer:  nmcli con up $ssidconfigurado
      fi
fi

export LC_ALL=$idioma

exit 0
Que distribuyo con estas reglas puppet:
file {"/usr/local/bin/conecta-default-wifi":
        owner=>root, group=>root, mode=>755,
        source=>"puppet:///modules/xubuntu18_portatil_ajustes/conecta-default-wifi",
}

cron { "cron_conecta_default_wifi":
           command => "/usr/local/bin/conecta-default-wifi",
           user => root,
           minute => "*/3",
           ensure => present
}
Por tanto tenemos un script y una tarea cron que lo llama cada 3 minutos. El script hace lo siguiente:

  1. Configuramos parámetros para una red wifi con SSID "WIFI_AULAS", una clave fija y un nombre de conexión "ies" para el Network Manager.
  2. Si la tarjeta wifi está apagada en Network Manager, se enciende.
  3. Si la wifi está conectada a un punto wifi, mira si el nombre de la SSID es "WIFI_AULAS". En caso afirmativo, finalizamos el script y no continuamos en los pasos siguientes.
  4. Si existe alguna conexión en Network Manager con el nombre "ies", la borramos. Esto es simplemente para hacer limpieza si ya nos habíamos conectado antes.
  5. Escaneamos las redes wifi circundantes en busca de "WIFI_AULAS". Si la encontramos a nuestro alcance nos conectamos a ella creando una conexión "ies" en Network Manager.
  6. Todo esto se repite cada 3 minutos, de tal forma que tan pronto aparezca en el espectro radioeléctrico la wifi "WIFI_AULAS" el portátil se conectará a ella, desconectando de cualquier otra red wifi en la que estuviera enlazado y permaneciendo conectado mientras esté a su alcance.

Con esto el trabajo queda reducido a llegar al aula con un punto wifi (vale cualquier punto de acceso portátil, incluido un router casero de ADSL) configurado con WIFI_AULAS y la clave indicada, enchufarlo a un punto de red cableado, sacar los portátiles del armario y encenderlos.

En pocos minutos todos estarán conectados a la wifi sin ninguna actuación por nuestra parte y con tmux-cssh o ssh podremos controlarlos. Incluso si tenemos puppet y pgksync en modo automático se ejecutarán sin que tengamos que hacer nada. El punto de acceso solo lo usaremos cuando queramos trabajar de esta manera. El resto del tiempo estará apagado y guardado.


Debido a que te encuentras que la gente mas insospechada se niega a creer la gesta del Apolo XI, ahí va el documental definitivo:



1 comentario:

  1. Ahora que llegan las vacaciones viene bien dar un repaso a todos los portátiles de los alumnos: ejecutar puppet, pkgsync, limpiar los usuarios cacheados. consejoscomunales.net/cultura-wari-o-huari/

    ResponderEliminar