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