Portál AbcLinuxu, 30. dubna 2025 09:04
Expect je nástroj pro automatizaci obsluhy interaktivních aplikací jako jsou scp, telnet, ftp, passwd, fsck, rlogin, tip, atd.
Já na něj narazil při hledání způsobu, jak dostat soubor pomocí skriptu na hosting. Můj hosting totiž umožňuje pouze scp
upload souborů.
#!/usr/bin/expect -f set filename [lindex $argv 0] set directory [lindex $argv 1] spawn scp "$filename" login@server:$directory/ expect { -re ".*es.*o.*" { exp_send "yes\r" exp_continue } -re ".*sword.*" { exp_send "very_secret_password\r" } } interact
#!/usr/bin/expect -f- hlavička skriptu s přesnou cestou k binárce
expect
set filename [lindex $argv 0]- přiřadí první spouštěcí parametr (v našem případě název souboru) do proměnné
filename
set directory [lindex $argv 1]- přiřadí druhý spouštěcí parametr (v našem případě vzdálenou cestu) do proměnné
directory
spawn scp "$filename" login@server:$directory/- spustí příkaz
scp
se zadanými parametry
expect {- začátek samotného automatického zpracovávání
-re ".*es.*o.*" {- očekáváme ".*es.*o.*", tj. dotaz na uložení cílového serveru do ověřených (Yes/No nebo yes/no)
exp_send "yes\r"- expect za nás zadá
yes
a stiskne enter
exp_continue- a předá řízení zpět
}
-re ".*sword.*" {- očekáváme dotaz na heslo
exp_send "very_secret_password\r"- expect za nás zadá heslo a stiskne
enter
} } interact- a vrátí volant zpět uživateli
Skript voláme příkazem ./jmeno_skriptu nazev_souboru vzdalena cesta
Tiskni
Sdílej:
Není problém si požádat o spoustu věcí, jen je třeba se ozvat, nikoho neukousneme Každopádně expect je prima a jako řešení jinak neřešitelných problémů ho sem tam také použiju, autoři některého SW jsou snad padlí na hlavu, že neumožňují dávkový režim a vynucují si akci uživatele.
Dal bych mu je, ale nějak jsem neviděl nic v inboxu
scp -o StrictHostKeyChecking no -o UserKnownHostsFile /dev/null
Jinak ale nechapu, kdyz to clovek spousti interaktivne ("- a vrátí volant zpět uživateli"), proc to heslo nezadavat taky interaktivne. Ja osobne jsem expect pouzil, kdyz jsem potreboval opravdu z interaktivniho systemu udelat neinteraktivni. telnetem se prihlasit na switch, udelat nejakou cinnost (dump configurace do script souboru, upload script souboru na tftp, smazani script souboru), ktera vyzadovala opravdu vstupy od uzivatele a ty vstupy byly opravdu zavisle na predchozi zprave od switche - napr. pri generovani scriptu uz muze script soubor existovat, pak se musi potvrdit prepsani, nebo se rovnou zapisuje, pri uploadu na tftp muze upload selhat, pri odhlasovani se nekdy switch pta, jestli ma ulozit provedene zmeny.
Ale jinak expect je fakt skvelej:)
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.