Ein WLAN-Controller für Arme: Gerüst für ein Shell-Skript, das den PSK eines (logischen) WLANS auf mehreren APs setzt.
Achtung: $table_content
muss beim Zurückschreiben den bisherigen Inhalt der Tabelle plus den neuen PSK enthalten. Vor dem Start des Skripts den Inhalt auslesen und das Skript anpassen.
Auch überprüfen, ob das richtige logische WLAN angegeben wurde (Im Skript WLAN-1-2). In Meinem Fall ist das 1. WLAN das Firmen-WLAN (WLAN-1
, Default VLAN), das Gäste-WLAN das logische 2. WLAN (WLAN-1-2
, VLAN ID 66).
#!/bin/bash
# Zweck:
#
# set_psk_guest-wlan.sh
#
# ---------------------------------------------------------------
# PSK für WLAN-1 ("xxxxx-gast") auf allen $targets setzen.
#
# Benötigt:
# ---------------------------------------------------------------
# Öffentlichen DSA-Schlüssel von root auf LANCOM-Access
# Point in "authorized_keys", um SSH-Login ohne Passwort
# per SSH-Key zu ermöglichen.
#
# Führt aus:
# ---------------------------------------------------------------
#Aktualisiert Einstellungs-Tabelle auf AP unter:
#/Setup/Interfaces/WLAN/Encryption/WLAN-1
#
# Datum
# ---------------------------------------------------------------
date_today=`date +"%Y-%m-%d %H:%M:%S"`
# User
# ---------------------------------------------------------------
user="root"
# Ziele
# ---------------------------------------------------------------
targets="192.168.40.a 192.168.40.b 192.168.40.c 192.168.40.d"
# Kommandozeilen-Parameter #1: Neuer PSK
# ---------------------------------------------------------------
psk=$1
# PSK Prüfen
# ---------------------------------------------------------------
if [ "$1" == "" ]; then
# Kein Parameter übergeben
echo "Benutzung: $0 [Neuer_PSK]"
echo
echo "Vorschlag: http://psk.onderka.com/"
echo
exit 1
fi
# Update-Kommando mit neuem PSK konstruieren
# ---------------------------------------------------------------
# LANCOM Config-Tabelle des logischen WLANs (Hier WLAN-1-2)
table_name="/Setup/Interfaces/WLAN/Encryption/WLAN-1-2"
# Achtung: Aktuelle Werte der Tabelle erst auslesen!
table_content="Yes 1 802.11i-WPA-PSK \"${psk}\" WPA2 TKIP/AES TKIP/AES 600 TLS Open-System"
command="set ${table_name} ${table_content}"
# Sicherheitsabfrage
# ---------------------------------------------------------------
read -n1 -p "PSK für Gäste-WLAN wirklich auf '${psk}' setzen? (j/n) "
antwort=$REPLY
echo
if [ ! "$antwort" == "j" ] && [ ! "$antwort" == "J" ]; then
# Kein "j" oder "J"
echo "Abbruch"
echo
exit 1;
fi
echo
# Fehlerzähler
# ---------------------------------------------------------------
errorcounter=0
apcounter=0
# Access Points abarbeiten
# ---------------------------------------------------------------
for accesspoint in $targets; do
apcounter=`expr $apcounter + 1`
# Ausgabe
echo -n "Setze neuen PSK auf Access Point $accesspoint ... "
# Update durchführen
ssh root@${accesspoint} $command &> ./wlan_keychange_${accesspoint}.log
# Rückgabewert prüfen
okstring=`grep "set ok:" ./wlan_keychange_${accesspoint}.log`
if [ "$okstring" != "" ]; then
# String "set ok:" enthalten
echo "OK"
else
# String "set ok:" nicht enthalten
errorcounter=`expr ${errorcounter} + 1`
echo "ERROR"
fi
done
echo
# Fehler?
# ---------------------------------------------------------------
echo Insgesamt ${apcounter} Access Points aktualisiert - ${errorcounter} Fehler.
echo "${date_today}: ${psk}" >> ./psk_guest-wlan.log
# Ende
# ---------------------------------------------------------------
echo