Skip to content
Permalink
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
executable file 87 lines (67 sloc) 2.36 KB
#!/bin/bash
###############################################################################
#
# dhcpRadiusUpdate.sh - This script will use ipecho.net to compare the reported
# IP address with the current IP address defined in a JumpCloud radius
# server. It is recommended to define radiusId manually, but if not, it
# will query the first returned record from the API and check if it needs
# to update it. If there's only 1 record, this is fine.
#
# *** If there are multiple RADIUS Ids, this is potentially destructive.
# Know which record is being updated.***
#
# REQUIRED: wget, curl, jq, JumpCloud API Key
# USAGE: This can be set to run as a cron, e.g., every hour at minute 0:
#
# $ crontab -e
# 0 * * * * /opt/dhcpRadiusUpdate.sh > /var/log/radupdate.log 2>&1
#
###############################################################################
# Define Vars
apiKey=
radiusId=
newIp=$(wget http://ipecho.net/plain -O - -q)
# If newIp can't be defined, bail
if [ $? -ne 0 ]; then
echo "Unable to determine newIp, exiting..." && exit 1
fi
getCurrentIp() {
curl \
-X 'GET' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "x-api-key: ${apiKey}" \
"https://console.jumpcloud.com/api/radiusservers/${radiusId}"
}
getRadiusId() {
curl \
-X 'GET' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "x-api-key: ${apiKey}" \
"https://console.jumpcloud.com/api/radiusservers"
}
putRadius() {
curl \
-X 'PUT' \
-H 'Content-Type: application/json' \
-H 'Accept: application/json' \
-H "x-api-key: ${apiKey}" \
-d '{"networkSourceIp":"'"${newIp}"'"}' \
"https://console.jumpcloud.com/api/radiusservers/${radiusId}"
}
if [ -z ${apiKey} ]; then
echo "apiKey must be defined, exiting..." && exit 1
fi
if [ -z ${radiusId} ]; then # Use the radiusId and currentIp of the first record returned
current=($(getRadiusId | jq '.results[0]._id, .results[0].networkSourceIp' | sed s/\"//g))
radiusId=$(echo ${current[0]})
currentIp=$(echo ${current[1]})
else # call the predefined radiusId and define currentIP
currentIp=($(getCurrentIp | jq '.networkSourceIp' | sed s/\"//g))
fi
# Compare currentIp to newIp, bail if nothing's chainged
if [[ ${currentIp} == ${newIp} ]]; then
echo "IP has not changed, have a nice day. ¯\_(ツ)_/¯" && exit 0
fi
putRadius
You can’t perform that action at this time.