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:
- 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 $user@$host expect "password:" { send "$passr"; exp_continue } send "scp test $user2@$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 pablofiasko@gmail.com # #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 $user@$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