Shell-Studie - 17 Tage - Erwarten Sie, dass Sie sich beim Remote-Host anmelden

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:

image.png


Ich denke du magst

Origin blog.51cto.com/13440764/2575397
Empfohlen
Rangfolge