Startseite > Umgebung & Hilfsprogramme > expect

expect: Automatisierung von interaktiven Programmen

`expect` ist eine leistungsstarke Tcl-Erweiterung zur Automatisierung der Interaktion mit interaktiven Programmen. Es ermöglicht Ihnen, Befehle, die Benutzereingaben erfordern, zu skripten und automatisch auszuführen. Es wird häufig verwendet, um Befehle wie `ssh`, `ftp` und `passwd` innerhalb von Skripten zu steuern.

Ü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.

Gleiche Kategorie Befehle