This bash script will utilize a program called expect to retrieve information about access points connected to WLC. Tested on WLC 5500 series. Current version of the script retrieves the following AP data:
– Access point name
– IP address
– Serial number
Data is written into a file in a table form, ready to be exported to Excel for example. It can be easily modified to meet your needs.
#!/bin/bash
# Install expect first
# Ubuntu: apt install expect
# CentOS: yum install expect
# Check if expect is present on the system
hash expect > /dev/null 2>&1
return_code=$?
if [[ $return_code != 0 ]]
then
printf "\nExpect is not present on this system\n"
else
# Get IP, username, password data
echo -n "Enter IP/hostname of WLC controller: "
read hostname
echo -ne '\n'
echo -n "Enter username: "
read username
echo -ne '\n'
echo -n "Enter SSH password: "
read -s -e password
echo -ne '\n'
# Start expect script
/usr/bin/expect <<EOF
# Set variables, provided from entered data above
set hostname [lindex $argv 0]
set username [lindex $argv 1]
set password [lindex $argv 2]
# Set log output
log_file -a ./results-AireOS.log
# Announce which device we are working on and at what time
send_user "\n"
send_user ">>>>> Working on $hostname @ [exec date] <<<<<\n"
send_user "\n"
# Don't log to console, set to 1 for debugging
log_user 0
# Don't check keys
spawn ssh -o StrictHostKeyChecking=no $username\@$hostname
# Allow this script to handle SSH connection issues
expect {
timeout { send_user "\nTimeout Exceeded - Check Host\n"; exit 1 }
eof { send_user "\nSSH Connection To $hostname Failed\n"; exit 1 }
"User: " { send "$username\n" }
}
# Provide password
send_user "Establishing connection ...\n"
expect "Password:"
send "$password\n"
send_user "\nConnected, fetching data, please be patient.\n"
# Enter your commands here (for AireOS):
expect "*>"
send "config paging disable\n"
expect "*>"
send "show access-point-config\n"
# Even with paging disabled, WLC will still prompt us to press any key to continue
# so me create a loop with exp_continue function to press enter (new line)
# on prompt "Press Enter to continue or <ctrl-z> to abort"
expect {
"Press Enter to continue or <ctrl-z> to abort" { send "\n"; exp_continue }
"(Cisco Controller) >" { send "logout\n" }
}
expect {
"Would you like to save them now? (y/N)" { send "N\n" }
eof
}
send_user "\n"
exit 0
EOF
fi
# Format output from expect script
output="$(cat ./results-AireOS.log | grep 'AP Name\|AP Serial\|IP Address' | grep -v 'Configuration\|NAT\|Switch\|Fallback' | \
cut -d '.' -f2- | awk '{ print $2 }'| tr -d '\r' | paste -d ":" - - - | sort -u | sed "1i AP:IP:SERIAL" | column -s: -t)"
# Write final file
printf "$output" > ./results-AireOS.log
printf "Finished, results are ready in the log file.\n\n"
