Übersicht
`expect` automatisiert interaktive Sitzungen, indem es auf vordefinierte Muster (z. B. Prompt-Strings) wartet und dann bestimmte Zeichenketten (z. B. Benutzereingaben) sendet. Dies ermöglicht die Ausführung komplexer Aufgaben ohne manuelles Eingreifen.
Hauptmerkmale
- Tcl-basierte Skriptsprachenerweiterung
- Automatisierung der Interaktion mit interaktiven Programmen (z. B. ssh, ftp, telnet)
- Funktionen für das Abgleichen von Prompt-Mustern und das Senden von Antworten
- Nützlich für die Automatisierung wiederkehrender und manueller Aufgaben
Hauptoptionen
Dies sind Optionen, die das Ausführungsverhalten des `expect`-Befehls selbst steuern. Sie unterscheiden sich von den `expect`- und `send`-Befehlen, die innerhalb eines Skripts verwendet werden.
Ausführungssteuerung und Debugging
Erzeugter Befehl:
Kombinieren Sie die Befehle.
Beschreibung:
`expect` Führen Sie den Befehl aus.
Kombinieren Sie diese Optionen und führen Sie die Befehle virtuell zusammen mit der KI aus.
Installation
`expect` ist auf den meisten Linux-Distributionen nicht standardmäßig enthalten und muss über einen Paketmanager installiert werden.
Debian/Ubuntu
sudo apt update && sudo apt install expect
Installiert `expect` mit dem APT-Paketmanager.
RHEL/CentOS/Fedora
sudo dnf install expect
Installiert `expect` mit dem DNF (oder Yum) Paketmanager.
Anwendungsbeispiele
`expect`-Skripte haben normalerweise die Erweiterung `.exp` und beginnen mit `#!/usr/bin/expect`, um sie mit dem `expect`-Interpreter auszuführen.
Automatische Antwort auf einfache Prompts
#!/usr/bin/expect
set timeout 10
spawn sh -c "echo -n 'Proceed? (y/n) '
read response"
expect "Proceed? (y/n) "
send "y\r"
expect eof
Ein Skript, das automatisch 'y' auf Fragen wie `Proceed? (y/n)` eingibt. (Verwendet `sh` für das Beispiel)
Automatisierung der SSH-Anmeldung (Sicherheitshinweis)
#!/usr/bin/expect
set timeout 20
set username "your_user"
set hostname "your_host"
set password "your_password"
spawn ssh $username@$hostname
expect "password:"
send "$password\r"
expect "$"
send "ls -l\r"
expect "$"
send "exit\r"
expect eof
Ein Beispiel für die automatische Anmeldung an einem Remote-Server über SSH und die Ausführung eines Befehls. **Das direkte Einbetten von Passwörtern in Skripte ist aus Sicherheitsgründen äußerst riskant und wird in Produktionsumgebungen nicht empfohlen.**
Automatisierung des `passwd`-Befehls (Sicherheitshinweis)
#!/usr/bin/expect
set timeout 10
set old_pass "old_password"
set new_pass "new_password"
spawn passwd
expect "Current password:"
send "$old_pass\r"
expect "New password:"
send "$new_pass\r"
expect "Retype new password:"
send "$new_pass\r"
expect eof
Ein Beispiel für die automatische Änderung eines Passworts mit dem `passwd`-Befehl. **Das Hardcodieren von Passwörtern in Skripten ist aus Sicherheitsgründen äußerst riskant.**
Tipps & Hinweise
`expect`-Skripte sind leistungsstark, aber es gibt einige Vorsichtsmaßnahmen, die Sie für Sicherheit und Stabilität berücksichtigen sollten.
Haupttipps
- **Passwortsicherheit**: Das direkte Hardcodieren von Passwörtern in Skripten ist sehr riskant. Erwägen Sie die Verwendung von Umgebungsvariablen, sicheren Konfigurationsdateien oder anderen Sicherheitsmechanismen wie `ssh-agent`.
- **Timeout-Einstellung**: Verwenden Sie den Befehl `set timeout`, um die maximale Zeit festzulegen, die `expect` auf ein bestimmtes Muster wartet. Der Standardwert beträgt 10 Sekunden. Sie können `set timeout -1` für unendliches Warten einstellen.
- **Genaues Musterabgleichen**: `expect` unterstützt reguläre Ausdrücke. Da Prompts möglicherweise nicht exakt übereinstimmen, verwenden Sie flexible Muster oder nutzen Sie den `*`-Wildcard.
- **Debugging**: Sie können den Befehl `expect -d your_script.exp` im Debug-Modus ausführen, um detailliert zu sehen, auf welche Muster `expect` wartet und welche Zeichenketten es sendet.
- **Verwendung von `interact`**: Wenn Sie die Kontrolle während der Skriptausführung an den Benutzer übergeben möchten, können Sie den Befehl `interact` verwenden.