Przykłady użycia pakietu Expect

Jak używać programu Expect do interakcji z programami odpalanymi w terminalu ?

Expect jest to biblioteka która pozwala na interakcję z aplikacjami terminalowymi. Mały przykład zastosowania:
1. Expect ma za zadanie połączyć się po ssh na maszynę a następnie wysłać z niej po scp plik test.

#!/usr/bin/expect -f

set user "user"
set user2 "user2"
set pass "haslo_usera"
set pass2 "haslo_usera2"
set host 10.0.0.1
set host2 10.0.0.2

spawn ssh [email protected]$host

expect "password:" { send "$passr"; exp_continue }
send "scp test [email protected]$host2:/r"
expect "password:" {send "$pass2r"; exp_continue }
send "exitr"

expect eof

 

Przykład jak można tworzyć kopię zapasową przełączników za pomocą expect’a:

#!/usr/bin/expect -f
#Expect Skript zum automatisierten Abziehen einer Konfig vom HP Switch
#per scp und password auth
#v 0.1 20080630 Steffen M. Steck [email protected]
#
#Usage ./scpconfigsaver.exp IP

set user "manager"
set pass "managers_passwd"
set host [lindex $argv 0]
set timeout 60
set date [exec date +%Y%m%d%H%M]
set output "$host_$date"
set dstdir /home/bkup/hpswitche

proc ssh_failed { } {
send_user "ERROR: SSH LOGIN FAILEDn"
exit
}

proc scp_ok { } {
send_user "SCP SUCCEEDEDn"
}

spawn scp [email protected]$host:/cfg/running-config $dstdir/$output.cfg

#check if login is successful and import ssh key if not yet in known_hosts
expect {
"Connection refused" { ssh_failed }
"No route to host" { ssh_failed }
"Permission denied" { ssh_failed }
"bad password." { ssh_failed }
"(yes/no)?" { send "yesr";
exp_continue }
"password:" { send "$passr";
exp_continue }
"Password:" { send "$passr";
exp_continue }
"100% " { scp_ok }
default { ssh_failed }
}

wait
expect eof

 

Share Button

Przemek

Twórca portalu techfreak, elektronik, pasjonat wszystkiego co fajnie, co można przerobić. W wolnym czasie grzebie przy nettemp. A sport jaki uprawia to mini drony klasy 250.