Difference between revisions of "Con"
From Initech Technical Wiki
Line 1: | Line 1: | ||
− | If you initialise [[con]] with no arguments it gives you a full list of all devices registered in rancid | + | If you initialise [[con]] with no arguments it gives you a full list of all devices registered in rancid. |
<pre> | <pre> | ||
con | con | ||
Line 14: | Line 14: | ||
Either way selecting a device and pressing enter will login to that device by automatically figuring out the correct login binary to use. | Either way selecting a device and pressing enter will login to that device by automatically figuring out the correct login binary to use. | ||
+ | |||
+ | The code below is the bash script itself | ||
+ | <pre> | ||
+ | $ cat /usr/local/bin/con | ||
+ | #!/bin/bash | ||
+ | if [ `whoami` != "rancid" ]; then | ||
+ | echo "You must be the rancid user to run this, exiting" | ||
+ | exit | ||
+ | fi | ||
+ | if [ ! -z "$1" ] && [ -z `echo $1 | sed -r -e "s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])//g"` ]; then | ||
+ | if egrep -q "\s$1\s" ~rancid/.cloginrc; then | ||
+ | IP=$1 | ||
+ | else | ||
+ | dialog --yesno "That IP address doesn't seem to exist in the .cloginrc file. Would you like to try connecting anyway?" 0 0 | ||
+ | if [ "$?" != "0" ]; then | ||
+ | clear | ||
+ | exit | ||
+ | else | ||
+ | IP=$1 | ||
+ | fi | ||
+ | |||
+ | fi | ||
+ | elif [ ! -z "$1" ] && egrep -q "\s$1\$" /etc/hosts ; then | ||
+ | if egrep -q "\s$1\s" ~rancid/.cloginrc; then | ||
+ | IP=$1 | ||
+ | else | ||
+ | dialog --yesno "That hostname, while existing in the /etc/hosts file, doesn't seem to exist in the .cloginrc file. Would you like to try connecting anyway?" 0 0 | ||
+ | if [ "$?" != "0" ]; then | ||
+ | clear | ||
+ | exit | ||
+ | else | ||
+ | IP=$1 | ||
+ | fi | ||
+ | |||
+ | fi | ||
+ | else | ||
+ | if [ -z "$1" ] ; then | ||
+ | IP_LIST=`cat ~rancid/.cloginrc | egrep "^add\s" |awk '{print $3}' | sort | uniq | grep -v "\*"` | ||
+ | else | ||
+ | IP_LIST=`egrep -i -A 1 $1 ~rancid/.cloginrc | egrep "^add\s" |awk '{print $3}' | sort | uniq | grep -v "\*"` | ||
+ | fi | ||
+ | if [ -z "$IP_LIST" ]; then | ||
+ | dialog --yesno "Couldn't find anything that matched that term, would you like a full list instead?" 0 0 | ||
+ | if [ "$?" = "0" ]; then | ||
+ | $0 | ||
+ | fi | ||
+ | clear | ||
+ | exit | ||
+ | fi | ||
+ | declare -a MENU_OPTIONS | ||
+ | COUNT=0 | ||
+ | for IP in $IP_LIST | ||
+ | do | ||
+ | DESC=`egrep -B 1 "\s$IP\s" ~rancid/.cloginrc | egrep "^(\s*)?#" | sed -r -e "s/(\s*)?#(\s*)?//g"` | ||
+ | MENU_OPTIONS=( "${MENU_OPTIONS[@]}" "${IP}" ) | ||
+ | MENU_OPTIONS=( "${MENU_OPTIONS[@]}" "${DESC}" ) | ||
+ | COUNT=$((COUNT+1)) | ||
+ | done | ||
+ | if [ "$COUNT" -gt "1" ] ; then | ||
+ | dialog --menu "The following devices match your search term of $1 please select one to connect" 0 0 0 "${MENU_OPTIONS[@]}" 2>/tmp/menu-selection | ||
+ | if [ "$?" != "0" ]; then | ||
+ | clear | ||
+ | exit | ||
+ | else | ||
+ | IP=$(</tmp/menu-selection) | ||
+ | unlink /tmp/menu-selection | ||
+ | fi | ||
+ | fi | ||
+ | fi | ||
+ | for GROUP in `grep '^LIST_OF_GROUPS' /etc/rancid/rancid.conf | sed -r -e "s/LIST_OF_GROUPS(\s*)?=(\s*)?\"(.*)\"/\3/"` | ||
+ | do | ||
+ | TYPE=`grep "^${IP}:" ~rancid/${GROUP}"/router.db" | awk -F: '{print $2}'` | ||
+ | if [ -z $TYPE ]; then | ||
+ | dialog --yesno "Couldn't find a manufacturer type for $IP in any router.db file, you should probably add it. If you want i can assume that it's a Cisco and try and connect anyway?" 0 0 | ||
+ | if [ "$?" != "0" ]; then | ||
+ | clear | ||
+ | exit | ||
+ | else | ||
+ | clear | ||
+ | clogin $IP | ||
+ | fi | ||
+ | else | ||
+ | LOGIN_COMMAND=`egrep "\s"\'"${TYPE}"\'"\s" ~rancid/bin/rancid-fe | awk '{print $3}' |sed -r -e s/\'\(,\)\?//g | xargs -I arg1 egrep "\s*open\(INPUT,\".*login " ~rancid/bin/arg1 |awk '{print $1}' |sed -e s/open\(INPUT,\"//` | ||
+ | fi | ||
+ | $LOGIN_COMMAND $IP | ||
+ | done | ||
+ | </pre> |
Revision as of 21:46, 9 May 2016
If you initialise con with no arguments it gives you a full list of all devices registered in rancid.
con
If you initialise it with a keyword it gives you a list of the devices which name or description match the keyword
con corp
Either way selecting a device and pressing enter will login to that device by automatically figuring out the correct login binary to use.
The code below is the bash script itself
$ cat /usr/local/bin/con #!/bin/bash if [ `whoami` != "rancid" ]; then echo "You must be the rancid user to run this, exiting" exit fi if [ ! -z "$1" ] && [ -z `echo $1 | sed -r -e "s/((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])//g"` ]; then if egrep -q "\s$1\s" ~rancid/.cloginrc; then IP=$1 else dialog --yesno "That IP address doesn't seem to exist in the .cloginrc file. Would you like to try connecting anyway?" 0 0 if [ "$?" != "0" ]; then clear exit else IP=$1 fi fi elif [ ! -z "$1" ] && egrep -q "\s$1\$" /etc/hosts ; then if egrep -q "\s$1\s" ~rancid/.cloginrc; then IP=$1 else dialog --yesno "That hostname, while existing in the /etc/hosts file, doesn't seem to exist in the .cloginrc file. Would you like to try connecting anyway?" 0 0 if [ "$?" != "0" ]; then clear exit else IP=$1 fi fi else if [ -z "$1" ] ; then IP_LIST=`cat ~rancid/.cloginrc | egrep "^add\s" |awk '{print $3}' | sort | uniq | grep -v "\*"` else IP_LIST=`egrep -i -A 1 $1 ~rancid/.cloginrc | egrep "^add\s" |awk '{print $3}' | sort | uniq | grep -v "\*"` fi if [ -z "$IP_LIST" ]; then dialog --yesno "Couldn't find anything that matched that term, would you like a full list instead?" 0 0 if [ "$?" = "0" ]; then $0 fi clear exit fi declare -a MENU_OPTIONS COUNT=0 for IP in $IP_LIST do DESC=`egrep -B 1 "\s$IP\s" ~rancid/.cloginrc | egrep "^(\s*)?#" | sed -r -e "s/(\s*)?#(\s*)?//g"` MENU_OPTIONS=( "${MENU_OPTIONS[@]}" "${IP}" ) MENU_OPTIONS=( "${MENU_OPTIONS[@]}" "${DESC}" ) COUNT=$((COUNT+1)) done if [ "$COUNT" -gt "1" ] ; then dialog --menu "The following devices match your search term of $1 please select one to connect" 0 0 0 "${MENU_OPTIONS[@]}" 2>/tmp/menu-selection if [ "$?" != "0" ]; then clear exit else IP=$(</tmp/menu-selection) unlink /tmp/menu-selection fi fi fi for GROUP in `grep '^LIST_OF_GROUPS' /etc/rancid/rancid.conf | sed -r -e "s/LIST_OF_GROUPS(\s*)?=(\s*)?\"(.*)\"/\3/"` do TYPE=`grep "^${IP}:" ~rancid/${GROUP}"/router.db" | awk -F: '{print $2}'` if [ -z $TYPE ]; then dialog --yesno "Couldn't find a manufacturer type for $IP in any router.db file, you should probably add it. If you want i can assume that it's a Cisco and try and connect anyway?" 0 0 if [ "$?" != "0" ]; then clear exit else clear clogin $IP fi else LOGIN_COMMAND=`egrep "\s"\'"${TYPE}"\'"\s" ~rancid/bin/rancid-fe | awk '{print $3}' |sed -r -e s/\'\(,\)\?//g | xargs -I arg1 egrep "\s*open\(INPUT,\".*login " ~rancid/bin/arg1 |awk '{print $1}' |sed -e s/open\(INPUT,\"//` fi $LOGIN_COMMAND $IP done