1 , erwarteter regulärer Ausdruck
( 1) Erwarten Sie keine interaktive Anmeldung
Expect ist eine kostenlose Programmierwerkzeugsprache, mit der automatische und interaktive Aufgabenkommunikation ohne menschliches Eingreifen realisiert werden kann. Zum Beispiel: SSH-Login, FTP-Login usw. werden in ein Skript geschrieben, um es automatisch zu vervollständigen.
( 2) Installieren Sie erwarten
[root @ test ~] # yum -y install erwarten
( 3) Verwendung
A. Definieren Sie die Shell für die Skriptausführung
[root @ test ~] # find / -name erwarten / usr / bin / erwarten
#! / usr / bin / erwarten
Definiert ist der Verknüpfungspfad der erwarteten ausführbaren Datei .
B 、Timeout 30 einstellen
Stellen Sie die Zeitüberschreitungszeit ein, das Gerät ist Sekunden. Wenn Zeitüberschreitung -1 bedeutet, bedeutet dies, dass niemals eine Zeitüberschreitung auftritt. Die Standardzeitüberschreitung beträgt 10 Sekunden
C 、laichen
spawn ist ein interner Befehl, der nur nach Eingabe der Expect-Umgebung ausgeführt werden kann. Wenn Expect nicht direkt unter der Standard-SHELL installiert oder ausgeführt wird, wird der Spawn-Befehl nicht gefunden. Die Hauptfunktion kann nicht direkt in der Standard-Shell-Umgebung ausgeführt werden. Ihre Hauptfunktion besteht darin, dem laufenden SSH-Prozess eine Shell hinzuzufügen, um interaktive Anweisungen zu übertragen.
D 、erwarten
Der Befehl "Expect Internal" wird hauptsächlich verwendet, um zu bestimmen, ob das Ausgabeergebnis eine bestimmte Zeichenfolge enthält. Wenn dies nicht der Fall ist, wird es sofort zurückgegeben. Andernfalls wird es nach einer bestimmten Zeit zurückgegeben. Die Wartezeit wird durch Timeout festgelegt.
E 、senden
Führen Sie die interaktive Aktion aus und geben Sie die in der Interaktion auszuführende Aktion in die interaktive Anweisung ein.
"\ R" sollte am Ende der Befehlszeichenfolge hinzugefügt werden . Wenn ein abnormaler Wartezustand vorliegt, kann dieser überprüft werden.
F 、exp_continue
Fahren Sie mit der nächsten interaktiven Operation fort
G 、interagieren
Behalten Sie nach der Ausführung den interaktiven Status bei und übertragen Sie das Steuerelement auf die Konsole. Wenn Sie dieses Element nicht hinzufügen, wird es nach Abschluss der Interaktion automatisch beendet.
H 、 $ argv
Das Expect-Skript kann die von bash übergebenen Parameter akzeptieren, die mit [lindex $ argv n] abgerufen werden können. N beginnt bei 0 und repräsentiert die ersten, zweiten, dritten ... Parameter.
( 4) Melden Sie sich über SSH ohne Passwort beim Server an (nicht geheime Schlüsselmethode).
[root @ test shell] # vi ssh.sh "Passwort" {send "$ passwd \ r"} }} #! / usr / bin / erwarten setze ip "192.168.0.20" Set Name "root" setze passwd "123456" Zeitüberschreitung einstellen 25 spawn ssh $ name @ $ ip erwarten von { "yes / no" {send "yes \ r"; exp_continue} "Passwort" {send "$ passwd \ r"} }} Erwarten Sie "#" #Judging, ob das letzte Ausgabeergebnis die Zeichenfolge "password:" enthält. Wenn dies der Fall ist, kehren Sie sofort zurück und führen Sie die Ausführung nach unten aus. Andernfalls wird gewartet, bis das Timeout abgelaufen ist sende "touch /root/test.txt\r" sende "ls / root> /root/test.txt\r" sende "exit \ r" Erwarten Sie eof # Nachdem Sie den obigen Befehl ausgeführt haben, beenden Sie Expect, geben Sie der Konsole die Kontrolle und wechseln Sie zurück zum manuellen Betrieb [root @ test shell] # erwarte ssh.sh spawn ssh [email protected] [email protected] Passwort: Letzte Anmeldung: Fr 27 Nov 00:18:47 2020 von 192.168.0.10 [root @ test ~] # touch /root/test.txt [root @ test ~] # ls / root> /root/test.txt [root @ test ~] # exit Ausloggen Verbindung zu 192.168.0.20 geschlossen. [root @ test shell] #
Hinweis: erwarten -f ssh.sh zeigt die Fehlermeldung einer nicht erfolgreichen Skriptausführung an.
( 5) Batch-SSH-Anmeldeserver zur Verwaltung
[root @ test shell] # cat ssh.exp #! / usr / bin / erwarten setze ipaddr [lindex $ argv 0] setze passwd [lindex $ argv 1] Timeout einstellen 30 spawn ssh root @ $ ipaddr erwarten von { "yes / no" {send "yes \ r"; exp_continue} "Passwort" {send "$ passwd \ r"} }} erwarten von "#" sende "cd / root \ r" sende "rm -rf test.txt \ r" sende "exit \ r" erwarte eof [root @ test shell] # Das Shell-Skript übergibt Parameterinformationen wie IP und Passwort: [root @ test shell] # cat login.sh #! / bin / bash Echo für ip in `awk '{print $ 1}' / root / shell / ip_list.txt` tun pass = `grep $ ip /root/shell/ip_list.txt|awk '{print $ 2}'` Erwarten Sie /root//shell/ssh.exp $ ip $ pass getan [root @ test shell] # ip_list.txt Datei [root @ test shell] # cat ip_list.txt 192.168.0.20 123456 [root @ test shell] # Skript ausführen [root @ test shell] # sh login.sh spawn ssh [email protected] [email protected] Passwort: Letzte Anmeldung: Fr 27 Nov 00:32:36 2020 von 192.168.0.106 [root @ test ~] # cd / root [root @ test ~] # rm -rf test.txt [root @ test ~] # exit Ausloggen Verbindung zu 192.168.0.20 geschlossen. [root @ test shell] #
Persönliche öffentliche Nummer: