Kulcsszó - bash

A mai rövid cikkemben megmutatom, miként lehet Linux alól Cisco eszközöket menedzselni ssh-n keresztül, emberi beavatkozás nélkül. A példaszkriptben be fogunk lépni távolról egy Cisco switch-re, jogosultságot emelünk, majd meg fogunk pingetni egy távoli eszközt. Nem is a pingetésen van a hangsúly, hisz bármiyen más, bonyolultabb műveletet is elvégezhetünk így - a lényeg, hogy ezt miként lehet automatizálni :).
A szkript futtatásához szükséged lesz az alábbiakra:

  • Linux gépre telepített expect parancs
  • ssh engedélyezése Cisco eszközön

#!/bin/bash

ciscoip="IP CÍM HELYE"
ciscouser="FELHASZNÁLÓNÉV HELYE"
ciscopassword="JELSZÓ HELYE"
logfile=/var/log/cisco_ping.log
tmpfile=/tmp/cisco_ping.tmp

/usr/bin/expect << EOD > $tmpfile

set timeout 3000
spawn ssh -o StrictHostKeyChecking=no $ciscoip
expect "User:"
send "$user\n"
expect "ssword:"
send "$password\n"
expect ">"
send "enable\n"
expect "ssword:"
send "$password\n"
expect "#"
send "ping 8.8.8.8\n"
expect "#"
send "logout\n"
EOD

if [ $(grep "Success rate is 100 percent" $tmpfile | wc -l) -eq 0 ]; then
echo "$(date +%Y-%m-%d" "%T) $ciscoip router ping failed" >> $logfile
fi

exit 0

A napokban egy LVM targetek mentését végző bash szkript megírásán dolgoztam. A szkript - miután lekéri az LVM targetek listáját - egy while ciklus segítségével sorról sorra feldolgozza az LVM targetek nevét, majd ssh kapcsolatot nyit, snapshotot készít, és lementi a targetek tartalmát.
Tesztjeim során sajnos az első target mentése után a while ciklus mindig megszakadt. Hogy miért? Azért, mert az SSH breakelte a ciklust. Megoldást egy fórumon találtam, a parancs végére egy < /dev/null írása megoldja a problémát:ssh example.com "lvcreate -L 10G -n snapshotneve -s targetneve >/dev/null 2>&1" < /dev/null