További magyarázatok helyett álljon itt egy példa, amely bejelentkezik Linux alól egy Cisco eszközre SSH-n keresztül (spawn ssh -l $ap_user $ap_ip) és beállít ezt-azt. Ha még soha nem jelentkeztünk be erre az eszközre, akkor ugye meg kell erősítenünk, hogy tényleg elfogadjuk azt az RSA kulcsot, amit az SSH szerver küld a kliensünk számára, viszont ilyesmire csak az első bejelentkezésnél kér minket az SSH kliens, minden további bejelentkezésnél a szerver RSA kulcsát a saját kis "known_hosts" fájljában lévő kulccsal veti össze, és nem kérdez alapból semmit. A kilencedik sor ezt a helyzetet kezeli le, küld egy "yes"-t, ha még nem látott ilyen RSA kulcsot, ellenkező esetben pedig csendben timeoutol az ötödik másodperc után és folytatja a következő sorral. Maga a konfiguráció egyébként, amit a szkript elvégez, az egy új, "minta" nevű SNMPv3 user felvétele a "MINTAcsoport" nevű SNMPv3 group-ba, illetve a hozzá tartozó jelszó beállítása, majd a teljes konfiguráció mentése:
#!/usr/bin/expectA kódból látható, hogy ezt a szkriptet változókkal kell meghívni, a szkript neve után meg kell adnunk az admin user nevét, jelszavát, majd azt az IP-t is, ahová be szeretnénk jelentkezni. Ez a megoldás jelentősen megkönnyíti az expect szkriptünk ciklusból való meghívását, így ugyanis könnyen fabrikálhatunk olyan shell szkriptet köré, amivel minden adminisztrálandó eszközünkön el tudjuk végezni a kérdéses feladatot.
set ap_user [lindex $argv 0]
set ap_pass [lindex $argv 1]
set ap_ip [lindex $argv 2]
set timeout 5
spawn ssh -l $ap_user $ap_ip
expect "Are you sure" { send "yes\r"} timeout {}
expect "password:"
send "$ap_pass\r"
expect "#"
send "conf t\r"
expect "(config)#"
send "snmp-server user minta MINTAcsoport v3 auth md5 MINTAjelszo\r"
expect "(config)#"
send "exit\r"
expect "#"
send "copy run start\r"
expect "Destination"
send "\r"
expect "#"
send "exit\r"
expect "closed"
Nincsenek megjegyzések:
Megjegyzés küldése