English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Sfondo
Nella scrittura di script Linux ci sono molte situazioni che riguardano operazioni remote, come login remoto ssh, copia remota scp, trasmissione di file sftp, ecc. Questi comandi coinvolgono sempre l'inserimento di password di sicurezza, e per utilizzare i comandi normalmente è necessario inserire manualmente le password e accettare la verifica di sicurezza. Per implementare operazioni remote automatizzate, possiamo utilizzare le funzionalità di expect.
Expect è un linguaggio di programmazione gratuito utilizzato per implementare la comunicazione tra compiti automatici e interattivi senza l'intervento dell'uomo. Expect è in continua evoluzione e, man mano che passa il tempo, diventa sempre più potente, diventando un potente assistente per gli amministratori di sistema. Expect richiede il supporto del linguaggio di programmazione Tcl per funzionare correttamente sul sistema, quindi è necessario installare Tcl prima di eseguire expect.
Installazione di expect
Expect è stato creato sulla base di Tcl, quindi prima di installare expect dovremmo prima installare Tcl.
(Primo) Installazione di Tcl
Pagina principale: http://www.tcl.tk
Indirizzo di download: http://www.tcl.tk/software/tcltk/downloadnow84.tml
1. Scarica il pacchetto sorgente
wget http://nchc.dl.sourceforge.net/sourceforge/tcl/tcl8.4.11-src.tar.gz
2. Decomprimi il pacchetto sorgente
tar xfvz tcl8.4.11-src.tar.gz
3. Installazione e configurazione
cd tcl8.4.11/unix ./configure --prefix=/usr/tcl --enable-shared make make install
Attenzione:
1. Dopo aver completato l'installazione, entra nella directory radice del codice sorgente di tcl, copia il file tclUnixPort.h dalla sottodirectory unix alla sottodirectory generic.
2. Non eliminare il codice sorgente di tcl temporaneamente, perché il processo di installazione di expect lo necessita.
(Due) Installazione di expect (richiede le librerie di Tcl)
Pagina principale: http://expect.nist.gov/
1. Scarica il pacchetto sorgente
wget http://sourceforge.net/projects/expect/files/Expect/5.45/expect5.45.tar.gz/download
2. Decomprimi il pacchetto sorgente
tar xzvf expect5.45.tar.gz
3. Installazione e configurazione
cd expect5.45 ./configure --prefix=/usr/expect --with-tcl=/usr/tcl/lib --with-tclinclude=../tcl8.4.11/generic make make install ln -s /usr/tcl/bin/expect /usr/expect/bin/expect
expect
Il cuore di expect è spawn, expect, send, set.
spawn chiama il comando da eseguire
Lo script expect deve finire con interact o expect eof, per eseguire task automatizzate di solito è sufficiente expect eof.
Altre impostazioni
La sintassi di expect è scritta
Expect utilizza la sintassi Tcl
Esempio
login.exp è specifico per il login remoto, modo d'uso rapido: login.exp "exclude" "${remote_ip}" "${remote_user}" "${remote_passwd}" "${remote_command}"
#!/usr/bin/expect -f ########################################################## # Accesso SSH e esecuzione dei comandi # Parametro:1.Use_Type [check/execute] # 2.SSHServerIp # 3.SSHUser # 4.SSHPassword # 5.CommandList [comandi multipli separati da punto e virgola] # Valore di ritorno: # 0 Successo # 1 Numero di parametri non corretto # 2 Servizio server SSH non aperto # 3 Password utente SSH non corretta # 4 Connessione SSH server timeout ########################################################## proc usage {} { regsub ".*/" $::argv0 "" name send_user "Usage:\n" send_user " $name Use_Type SSHServerIp SSHUser SSHPassword CommandList\n" exit 1 } ## Giudizio del numero di parametri if { [llength $argv] != 5 } { usage } # Set variable values set Use_Type [lindex $argv 0] set SSHServerIp [lindex $argv 1] set SSHUser [lindex $argv 2] set SSHPassword [lindex $argv 3] set CommandList [lindex $argv 4] #spawn ping ${SSHServerIp} -w 5 #expect { # -nocase -re "100% packet loss" { # send_error "Ping ${SSHServerIp} is unreachable, Please check the IP address.\n" # exit 1 # } #} set timeout 360 set resssh 0 # Define variable to mark whether yes confirmation is entered during SSH connection set inputYes 0 set ok_string LOGIN_SUCCESS if {$Use_Type=="check"} { # Activate SSH connection, if you need to enter yes to confirm, enter yes, set inputYes to 1, otherwise enter SSH password spawn ssh ${SSHUser}@${SSHServerIp} "echo $ok_string" } else { spawn ssh ${SSHUser}@${SSHServerIp} "$CommandList" } expect { -nocase -re "yes/no" { send -- "yes\n" set inputYes 1 } -nocase -re "assword: " { send -- "${SSHPassword}\n" set resssh 1 } #-nocase -re "Last login: " { # send -- "${CommandList}\n" #} $ok_string {} -nocase -re "Connection refused" { send_error "SSH services at ${SSHServerIp} is not active.\n" exit 2 } timeout { send_error "Connect to SSH server ${SSHUser}@${SSHServerIp} timeout(10s).\n" exit 4 } } # Se è stato inserito yes per confermare, inserire la password ssh if {$inputYes==1} { expect { -nocase -re "assword: " { send -- "${SSHPassword}\n" set resssh 1 } } } # Se viene visualizzato il messaggio try again o password:, significa che il nome utente e la password inseriti sono errati, quindi esce direttamente. if {$resssh==1} { expect { -nocase -re "try again" { send_error "SSH user:${SSHUser} passwd error.\n" exit 3 } -nocase -re "assword:" { send_error "SSH user:${SSHUser} passwd error.\n" exit 3 } eof {} } } send_error -- "$expect_out(buffer)" #-nocase -re "No such user" { # send_error "No such user.\n" # exit 5 # } #exit
Sommario
Questo è tutto il contenuto dell'articolo, speriamo che il contenuto di questo articolo abbia un valore di riferimento o di studio per voi. Se avete domande, potete lasciare un messaggio per scambiare opinioni, grazie per il supporto al manuale di urla.
Dichiarazione: il contenuto di questo articolo è stato tratto da Internet, di proprietà del rispettivo autore, il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato editato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di copyright, ti preghiamo di inviare una e-mail a notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare il problema e fornire prove pertinenti. Una volta verificata, il sito web rimuoverà immediatamente il contenuto sospetto di violazione del copyright.