Con
From Initech Technical Wiki
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