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"